git如何处理别人的pull request及解决冲突

时间:2024-04-01 18:52:44

出过两次了,每次都查很多资料,太蛋疼,记录在此。

当你的项目比较牛逼的时候,有人给你贡献代码,但他修改的地方恰恰你前阵子也修改了,这样在github中就不能够自动merge了。

因此你需要手动去解决冲突。首先要在本机安装好命令行工具gitbash,之后用clone拉下你的项目,之后

按照以下命令输入

git checkout -b 某人-master master
 
git pull https//github.com/某人的/某项目的.git master

这时候命令行会提示你有冲突,冲突文件是啥,那如何解决冲突呢,很简单

在同步代码的过程中,git会自动检查冲突,并尝试进行**自动合并**。最好的情况应该是大家同时修改一个文件,但是大家修改的地方不同了。在这样的情况下,git会进行非冲突合并,这时,在调用 git pull 的时候,git会尝试进行非冲突合并。
而在合并过程中有冲突的时候, git 会把修改记录直接保存在文件中,让开发者判断文件如何解决合并。例如,在一个描述文件中同时修改了一句话,在合并的时候,git会这么做:

<<<<<<< HEAD
It's not a project cool enough for you to enjoy the code but a mix of my thoughts in the year 2012~2013. I didn't know where the project leads to. Hope it will became useful after practice.
=======
It's not a project

即把两个更改都写在文件上,但是用=======来区别发生冲突的位置,在=======以上是 HEAD,即本地的代码;而=======以下则是来自远程的更改了。这个时候,你可以选择保留远程或本地的修改或者都不要(简单地说,把不需要的内容删除即可)。

 

也就是说我们把文件修改好后,把增加的那几行head >>><<<之类删掉就ok啦。之后冲突修改完毕,我们继续输入

git commit -a //把修改提交到这个人的分支上,会提示你成功merge本地代码到这个人的代码库
 
git checkout master //切换到自己的分支上
 
git merge 某人-master //

还要记着一点,本地修改代码前一定要先pull一下看看,记得慎用github的在线编辑功能




比如现在mygoare fork了我的项目,修改后提交了pull request。我可以在github上看到他的pull request,GitHub如果检测到Pull Request中包含的提交可以直接合并,会显示自动合并的提示信息。点击“Confirm Merge”按钮即完成Pull Request中所含提交的自动合并。自动合并完成后,自动关闭Pull Request。
  实际上在很多情况下,Pull Request所含提交有可能造成合并冲突,那样的话GitHub不再、也不能提供自动合并功能,就必须采用手工合并的方式。
 
创建分支
$ git checkout -b mygoare-master master
git如何处理别人的pull request及解决冲突
 
现在有个mygoare-master 分支,并且现在在这个分支上
git如何处理别人的pull request及解决冲突
 
从mygoare的远端拉下来,有冲突,无法自动合并,须手动合并
$ git pull git://github.com/mygoare/lehuo.git master
git如何处理别人的pull request及解决冲突
 
查看状态(现在所在分支,两个版本冲突的文件)红色的为有冲突的文件
$ git status
git如何处理别人的pull request及解决冲突
 
可以查看冲突之处
$ git diff
git如何处理别人的pull request及解决冲突
 
用编辑器打开相应文件修改
例如homepage.html
<<<<<<< HEAD
我的代码(多一个box-shadow)
=======
mygoare的代码
>>>>>>> b8f7a4ef57ef38eefb24ff987a8c2e51a1a30b9e
git如何处理别人的pull request及解决冲突
 

选择其一保留,得如下
git如何处理别人的pull request及解决冲突
 
 
改完所有冲突后,就没有红色冲突了
$ git add -A
$ git status
git如何处理别人的pull request及解决冲突
 
提交到本地
$ git commit -m "merge mygoare's code"
git如何处理别人的pull request及解决冲突
 
因为现在在mygoare-master分支上,需要切换到我的master
$ git checkout master
git如何处理别人的pull request及解决冲突
 
合并mygoare-master到我的master上
$ git merge mygoare-master
git如何处理别人的pull request及解决冲突
 
提交到远端
$ git push
git如何处理别人的pull request及解决冲突
 
提交成功
git如何处理别人的pull request及解决冲突
 
github的pull requests自动变为0
git如何处理别人的pull request及解决冲突
 
 
 /*********************************************************/
补充:
查看分支,带星绿色的是现在所处的分支
$ git branch
git如何处理别人的pull request及解决冲突
 
删除分支mygoare,这个是之前测试用的
$ git branch -D mygoare
git如何处理别人的pull request及解决冲突
 

添加远端地址,远端名任意起
$ git remote add mygoare https://github.com/mygoare/lehuo.git
git如何处理别人的pull request及解决冲突
 
查看远端
$ git remote -v
git如何处理别人的pull request及解决冲突
 
获取mygoare的内容
$ git fetch mygoare
git如何处理别人的pull request及解决冲突
 
合并
$ git merge mygoare/master
git如何处理别人的pull request及解决冲突
 
查看提交说明,看到此次合并没有产生不必要的合并提交。
$ git log --graph -2
git如何处理别人的pull request及解决冲突

出过两次了,每次都查很多资料,太蛋疼,记录在此。

当你的项目比较牛逼的时候,有人给你贡献代码,但他修改的地方恰恰你前阵子也修改了,这样在github中就不能够自动merge了。

因此你需要手动去解决冲突。首先要在本机安装好命令行工具gitbash,之后用clone拉下你的项目,之后

按照以下命令输入

git checkout -b 某人-master master
 
git pull https//github.com/某人的/某项目的.git master

这时候命令行会提示你有冲突,冲突文件是啥,那如何解决冲突呢,很简单

在同步代码的过程中,git会自动检查冲突,并尝试进行**自动合并**。最好的情况应该是大家同时修改一个文件,但是大家修改的地方不同了。在这样的情况下,git会进行非冲突合并,这时,在调用 git pull 的时候,git会尝试进行非冲突合并。
而在合并过程中有冲突的时候, git 会把修改记录直接保存在文件中,让开发者判断文件如何解决合并。例如,在一个描述文件中同时修改了一句话,在合并的时候,git会这么做:

<<<<<<< HEAD
It's not a project cool enough for you to enjoy the code but a mix of my thoughts in the year 2012~2013. I didn't know where the project leads to. Hope it will became useful after practice.
=======
It's not a project

即把两个更改都写在文件上,但是用=======来区别发生冲突的位置,在=======以上是 HEAD,即本地的代码;而=======以下则是来自远程的更改了。这个时候,你可以选择保留远程或本地的修改或者都不要(简单地说,把不需要的内容删除即可)。

 

也就是说我们把文件修改好后,把增加的那几行head >>><<<之类删掉就ok啦。之后冲突修改完毕,我们继续输入

git commit -a //把修改提交到这个人的分支上,会提示你成功merge本地代码到这个人的代码库
 
git checkout master //切换到自己的分支上
 
git merge 某人-master //

还要记着一点,本地修改代码前一定要先pull一下看看,记得慎用github的在线编辑功能




比如现在mygoare fork了我的项目,修改后提交了pull request。我可以在github上看到他的pull request,GitHub如果检测到Pull Request中包含的提交可以直接合并,会显示自动合并的提示信息。点击“Confirm Merge”按钮即完成Pull Request中所含提交的自动合并。自动合并完成后,自动关闭Pull Request。
  实际上在很多情况下,Pull Request所含提交有可能造成合并冲突,那样的话GitHub不再、也不能提供自动合并功能,就必须采用手工合并的方式。
 
创建分支
$ git checkout -b mygoare-master master
git如何处理别人的pull request及解决冲突
 
现在有个mygoare-master 分支,并且现在在这个分支上
git如何处理别人的pull request及解决冲突
 
从mygoare的远端拉下来,有冲突,无法自动合并,须手动合并
$ git pull git://github.com/mygoare/lehuo.git master
git如何处理别人的pull request及解决冲突
 
查看状态(现在所在分支,两个版本冲突的文件)红色的为有冲突的文件
$ git status
git如何处理别人的pull request及解决冲突
 
可以查看冲突之处
$ git diff
git如何处理别人的pull request及解决冲突
 
用编辑器打开相应文件修改
例如homepage.html
<<<<<<< HEAD
我的代码(多一个box-shadow)
=======
mygoare的代码
>>>>>>> b8f7a4ef57ef38eefb24ff987a8c2e51a1a30b9e
git如何处理别人的pull request及解决冲突
 

选择其一保留,得如下
git如何处理别人的pull request及解决冲突
 
 
改完所有冲突后,就没有红色冲突了
$ git add -A
$ git status
git如何处理别人的pull request及解决冲突
 
提交到本地
$ git commit -m "merge mygoare's code"
git如何处理别人的pull request及解决冲突
 
因为现在在mygoare-master分支上,需要切换到我的master
$ git checkout master
git如何处理别人的pull request及解决冲突
 
合并mygoare-master到我的master上
$ git merge mygoare-master
git如何处理别人的pull request及解决冲突
 
提交到远端
$ git push
git如何处理别人的pull request及解决冲突
 
提交成功
git如何处理别人的pull request及解决冲突
 
github的pull requests自动变为0
git如何处理别人的pull request及解决冲突
 
 
 /*********************************************************/
补充:
查看分支,带星绿色的是现在所处的分支
$ git branch
git如何处理别人的pull request及解决冲突
 
删除分支mygoare,这个是之前测试用的
$ git branch -D mygoare
git如何处理别人的pull request及解决冲突
 

添加远端地址,远端名任意起
$ git remote add mygoare https://github.com/mygoare/lehuo.git
git如何处理别人的pull request及解决冲突
 
查看远端
$ git remote -v
git如何处理别人的pull request及解决冲突
 
获取mygoare的内容
$ git fetch mygoare
git如何处理别人的pull request及解决冲突
 
合并
$ git merge mygoare/master
git如何处理别人的pull request及解决冲突
 
查看提交说明,看到此次合并没有产生不必要的合并提交。
$ git log --graph -2
git如何处理别人的pull request及解决冲突