以下讨论基于gitlab系统作为代码仓库。
项目Git初始化
创建一个空的git库或者初始化一个旧有git仓库
git init
现有项目关联到远程仓库
git remote add origin git@172.16.200.39:public-team/spring-learn.git
下载代码
git clone <仓库地址>
查看已关联远程仓库
git remote -v
创建分支
git branch -c "新分支名称"
切换分支
#如果分支不存在,先创建分支
git checkout -b "新分支名称"
#如果分支已存在
git checkout "新分支名称"
查看文件提交状态
git status
查看文件修改内容
git diff <文件路径>
缓存文件
git add <文件路径>
放弃文件修改
git checkout <文件路径>
取回缓存文件
git reset <文件路径>
# 取回所有文件
git reset *
提交修改到本地仓库
git commit -m "提交说明"
推送到远程仓库
#master分支
git push
#其他分支
git push 远程仓库名称 <分支名称>
或者
git push 远程仓库名称 <本地分支名称>:<远程分支名称>
查看提交记录
git log
回退版本
#分为两种情况
#已commit到本地仓库,未push到远程仓库
git reset --soft <回退目标版本号>
#已push到远程仓库
# 缺点是强制回退,会删除版本日志
git reset --hard <回退目标版本号>
#使用revert,版本反写
git revert -n <版本号>
退出Reverting状态
git revert --quit
取消文件跟踪
git rm <文件名>
合并分支
git merge <合并源分支>
删除分支
git branch -d <分支名称>
查看提交版本修改内容
git show <版本号>
我遇到的一些问题
初始项目代码提交问题
执行git init会初始化当前分支为master,而初始gitlab是没有这个分支的,这就造成了无法提交代码的情况。
#提交到origin仓库的master分支
git push origin master
#如果我想把切换到main分支再提交代码
#先切换到main分支
git checkout -b main
#想要拉取main分支的readme文件失败
git pull
#原因是本地的main分支是新创建的,而远程的main分支创建早于本地,所以需要加--allow-unrelated-histories参数允许合并历史纪录
git pull origin main --allow-unrelated-histories
#再执行push就可以了
git push origin main
跟队友代码冲突问题
跟队友同时修改了同一个文件。上面是你的修改,下面是队友的修改。
(1)简单粗暴的方法是手动修改。
(2)执行git mergetool运行代码合并工具。
开发过程中遇到线上问题需要切换分支
我们需要拉取一个临时分支去修改线上bug,但当前开发分支又存在已修改文件无法切换分支。这种情况是很可能出现的。
这个时候,reset是不可能的,不能浪费了我的劳动成果,我需要使用git stash将已修改文件暂时保存。
# 暂存修改文件
git add <修改文件>
# 保存临时改动
git stash push -m "注释"
# 再切换分支
使用reset命令回退了版本怎么找回
如果我们遇到了这种操作失误的话,也不要慌。git早就帮我们想好了解决办法。git有个reflog命令可以查看所有的版本引用变化,包括不会留下log日志的reset --hard。
git reflog
图中就显示了我git执行reset时的引用变化,我们再用reset去回退reset。
# 将版本回退到HEAD@{2}
git reset --hard HEAD@{2}
这样版本就被找回了!!!