“ 时隔一段时间都没有总结Git相关的知识点,今天继续Git相关的总结,如果您有问题的话可以在下面留言,我们可以进行相互学习和讨论。”
当我们在执行相关git操作时,遇到的问题:
本地代码修改完成时(此时远程仓库有人提交代码,本地版本落后于线上版本),执行指令:git add .
,这个时候在没有commit时,执行git pull
,或者你没有执行指令:git add .
而是直接git pull
,都会出现上面的error报错(主要是因为你和线上修改的都是同一板块,所以会有冲突产生;如果你们没有修改同一板块且没有冲突,那么这样执行是不会有问题的);
造成上面出错的原因是因为:别人修改了文件并且提交push,你也修改了此文件并且没有add和commit然后你在pull时就会出现此提示。
解决办法:
方法一:使用git stash
和git stash pop
来解决,首先将你修改的内容使用git stash
指令放入栈中,然后执行git pull
将远程代码拉取下来,接着执行git stash pop
然后出栈,对于有冲突的地方解决相关冲突即可,接着就执行git commit -m
和git push
就好了;
方法二:可以先执行:git add .
以及git commit -m
,然后再git pull
,拉取下来合并冲突之后,再git add .
、git commit -m
以及git push
即可。
git reset HEAD .
(撤销暂存区内所有文件);
git reset HEAD filename
(撤销暂存区内指定文件名)。
当有冲突时(前提:本地版本落后于线上版本),不使用git pull
方法,而是使用git fetch
和git rebase
来解决,这样做的好处是:可以少提交一个commit的信息。
具体步骤:
(1)首先在本地执行git add .
和git commit -m "..."
;
(2)然后拉取远程仓库的代码,执行指令:git fetch
,然后接着执行git rebase
,如果没有冲突就执行git push
;
(3)如果有冲突的话,就解决冲突,接着执行git add .
以及git rebase --continue
,有冲突一直执行本步骤直到冲突解决完;
(4)解决完冲突之后执行git push
即可;
参考链接:使用git fetch
和git rebase
来解决冲突合并
原因:可能是因为在格式化的时候更新了别人的代码的格式造成的原因。一般在merge代码时需要小心谨慎,对于你使用git pull
来合并代码时并且你们修改的是同一个部分的话就会有相关的问题,这个时候需要小心谨慎。这个时候可以使用上面03部分git fetch
和git rebase
来解决。
参考链接:在git提交代码会重复别人更新的代码
tag打标签作用:项目的版本管理中,每当一个release版本发布时,需要做一个记录,以便以后需要的时候能查找特定的版本,这时候就用到tag这个功能;
具体的步骤:
(1)git add .
(2)git commit -m "提交的一些信息"
(3)git tag -a x.x.x -m "info ..."
(4)git push
(5)注意一定要执行本步骤,否则你在远程刷新的话不会看到提交的tag标签信息等内容,执行指令:git push origin --tags
(–tags参数表示提交所有tag至服务器端,普通的git push origin master
操作不会推送标签到服务器端)
如果你要删除远程的tag标签,执行下面的步骤:(ps:下面0.0.1是我举例子中随便写的一个版本)
(1) 删除本地的指定tag,执行指令:git tag -d 0.0.1
(2)删除远程服务端的标签,执行指令:git push origin :refs/tags/0.0.1
即可删除远程端的
参考链接:git push tag错误的含义:“删除不存在的引用”
参考链接:如何利用Git中的tag管理项目版本号
注意:对于回滚的内容,建议自己可以先做练习至熟悉之后再进一步正式用于开发中。
步骤:在操作时为了以防万一,还是将分支进行一个备份,毕竟是需要将master分支进行一个删除的。
首先创建一个备份的backup分支,这个时候你是在master分支,然后接着在master分支创建backup分支,执行指令:git branch backup
;
上一步中已经将master分支上的内容全部进行了一个备份,接着我们需要将本地的backup分支推送到远程仓库中的backup分支上,执行指令:git push origin backup:backup
;
第二步中,已经将backup备份分支推送到远程仓库了,这个时候我们去github仓库上去看就会发现有master分支和backup分支(master分支和backup分支上的内容完全是相同的),这个时候我去本地可以看看master或者backup分支上去看看commit的历史提交记录,这个时候执行指令:git log --oneline
,图中是我git项目中的练习内容,在这里就以我写的为例子给大家展示一下:
看了第三步的图片之后,我以5d7d99b Create test1.md为例子,回退到创建它的时候,执行指令:git reset --hard 5d7d99b
,得到图中所示的内容:
接下来就是重头戏,并且也需要万分小心,毕竟你删除的可是主分支master分支,由于在远程仓库中master分支是默认的主分支,那么如果我们直接执行指令:git push origin :master
删除远程的master分支是会报错的,错误信息如图所示:
对于第五步中的报错,我的解决办法是解除master的主分支,将backup分支设置为主分支,具体步骤:setting->Branches->找到Default branch,然后选择除master分支之外的分支,在这里我选择的是backup分支->Update->I understand即可将backup分支设置为主分支,具体操作步骤如图中所示:
这个时候我们再去看远程仓库的分支,会发现backup为默认的主分支了,如图中所示:
在第六步和第七步执行完之后,我们接着执行第五步中的指令:git push origin :master
,这个时候就发现远程master分支已经被删除了,你可以去github远程仓库查看你的分支,这个时候只有backup一个主分支
接着我们将本地的master推送到远程的分支上,重新创建远程的master分支,执行指令:git push origin master
,就可以在远程github仓库中看到新的master分支,然后接着查看master分支上的commit历史提交就是第四步图中commit的信息,这个时候证明已经处理好远程master分支中commit提交的问题了;
接着我们就执行第六步,按照相同的思路步骤将master分支又设置回默认的主分支即可完成所有的步骤。
参考链接:git远程分支回滚
对于github的贡献来说也是值得重视的一个话题,在这里我就不细说了,之前也进行了一部分的相关演示,下面我会放上相关的参考链接,有兴趣的小伙伴可以参考下面这个链接进行一个演练。
参考链接:解决github提交commit时,contributions不统计显示绿色的问