Git详解(三)

“ 时隔一段时间都没有总结Git相关的知识点,今天继续Git相关的总结,如果您有问题的话可以在下面留言,我们可以进行相互学习和讨论。”

1. git pull拉取代码时遇到的error:您对下列文件的本地修改将被合并操作覆盖

当我们在执行相关git操作时,遇到的问题:
本地代码修改完成时(此时远程仓库有人提交代码,本地版本落后于线上版本),执行指令:git add .,这个时候在没有commit时,执行git pull,或者你没有执行指令:git add .而是直接git pull,都会出现上面的error报错(主要是因为你和线上修改的都是同一板块,所以会有冲突产生;如果你们没有修改同一板块且没有冲突,那么这样执行是不会有问题的);
造成上面出错的原因是因为:别人修改了文件并且提交push,你也修改了此文件并且没有add和commit然后你在pull时就会出现此提示。
解决办法:
方法一:使用git stashgit stash pop来解决,首先将你修改的内容使用git stash指令放入栈中,然后执行git pull将远程代码拉取下来,接着执行git stash pop然后出栈,对于有冲突的地方解决相关冲突即可,接着就执行git commit -mgit push就好了;

方法二:可以先执行:git add .以及git commit -m,然后再git pull,拉取下来合并冲突之后,再git add .git commit -m以及git push即可。

2. 关于git add之后如何撤销暂存区的内容

git reset HEAD .(撤销暂存区内所有文件);

git reset HEAD filename(撤销暂存区内指定文件名)。

3. 当有冲突时,使用git fetch和git rebase来解决

当有冲突时(前提:本地版本落后于线上版本),不使用git pull方法,而是使用git fetchgit 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 fetchgit rebase来解决冲突合并

4. 在git提交代码会重复别人更新的代码

原因:可能是因为在格式化的时候更新了别人的代码的格式造成的原因。一般在merge代码时需要小心谨慎,对于你使用git pull来合并代码时并且你们修改的是同一个部分的话就会有相关的问题,这个时候需要小心谨慎。这个时候可以使用上面03部分git fetchgit rebase来解决。
参考链接:在git提交代码会重复别人更新的代码

5. git tag打标签

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管理项目版本号

6. git reset回滚方法二

git reset回滚方法一的参考链接

注意:对于回滚的内容,建议自己可以先做练习至熟悉之后再进一步正式用于开发中。

步骤:在操作时为了以防万一,还是将分支进行一个备份,毕竟是需要将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项目中的练习内容,在这里就以我写的为例子给大家展示一下:
git log --oneline

看了第三步的图片之后,我以5d7d99b Create test1.md为例子,回退到创建它的时候,执行指令:git reset --hard 5d7d99b,得到图中所示的内容:
git reset --hard

接下来就是重头戏,并且也需要万分小心,毕竟你删除的可是主分支master分支,由于在远程仓库中master分支是默认的主分支,那么如果我们直接执行指令:git push origin :master删除远程的master分支是会报错的,错误信息如图所示:
git push origin :master

对于第五步中的报错,我的解决办法是解除master的主分支,将backup分支设置为主分支,具体步骤:setting->Branches->找到Default branch,然后选择除master分支之外的分支,在这里我选择的是backup分支->Update->I understand即可将backup分支设置为主分支,具体操作步骤如图中所示:
backup主分支操作

这个时候我们再去看远程仓库的分支,会发现backup为默认的主分支了,如图中所示:
backup主分支

在第六步和第七步执行完之后,我们接着执行第五步中的指令:git push origin :master,这个时候就发现远程master分支已经被删除了,你可以去github远程仓库查看你的分支,这个时候只有backup一个主分支

接着我们将本地的master推送到远程的分支上,重新创建远程的master分支,执行指令:git push origin master,就可以在远程github仓库中看到新的master分支,然后接着查看master分支上的commit历史提交就是第四步图中commit的信息,这个时候证明已经处理好远程master分支中commit提交的问题了;

接着我们就执行第六步,按照相同的思路步骤将master分支又设置回默认的主分支即可完成所有的步骤。

参考链接:git远程分支回滚

7. github提交commit时,contributions不统计显示绿色的问题

对于github的贡献来说也是值得重视的一个话题,在这里我就不细说了,之前也进行了一部分的相关演示,下面我会放上相关的参考链接,有兴趣的小伙伴可以参考下面这个链接进行一个演练。
参考链接:解决github提交commit时,contributions不统计显示绿色的问