git merge解决冲突_如何解决git merge冲突

git merge解决冲突

Git是开放源代码项目和许多封闭源代码项目的标准源代码存储库管理器。 本文向新的Git用户展示了如何做一些稍微先进但对它的目的至关重要的事情:解决git-merge冲突。

什么是git merge?

在本地分支 ,然后将其代码推送到中心位置。 然后,其他人可以将代码拉回到本地副本,并在合作者的更改到位的情况下继续自己的工作。

当您要将分支中的更改带入当前分支时,请使用git merge命令。 合并将其他分支中的所有更改应用于当前分支。

什么是合并冲突?

在可以并行化工作的每种情况下,工作最终都会重叠。 有时,两个开发人员会以两种不同的方式更改同一行代码。 在这种情况下,Git无法确定哪个版本正确-只有开发人员才能决定。

如果发生这种情况,开发人员将在git合并期间看到以下错误:


   
   
Auto-merging [ filename1 ]
CONFLICT ( content ) : Merge conflict in [ filename1 ]
Automatic merge failed; fix conflicts and then commit the result.

解决合并冲突可能需要一分钟,也可能需要几天(如果需要修复很多文件)。 建议并遵循良好的编码习惯,每天通过多次提交推送拉取合并来多次同步代码。

您如何解决git合并冲突?

Git在其错误消息中提供了解决冲突的线索。 它说[filename1]中的合并冲突 ,因此您知道该文件存在问题。 然后说修复冲突,然后提交结果 ,因此,如果您按照指示进行操作,请编辑文件,然后提交,一切都应该正常进行。 让我们看看实际情况。

创建一个新的Git存储库,添加文件,创建分支,进行一些冲突的编辑,然后查看其外观。

从一个空目录开始并运行git init


   
   
$ ls -l
$ git init
Initialized empty Git repository in / home / bob / example / .git /
$

现在创建一个README文件并提交更改:


   
   
$ echo "This is a new README file" > README.md
$ cat README.md
This is a new README file
$ git add README.md
$ git commit -m "README file added"
1 file changed, 1 insertion ( + )
create mode 100644 README.md
$ git status
On branch master
nothing to commit, working tree clean
$

创建一个新分支:


   
   
$ git checkout -b "branch_to_create_merge_conflict"
Switched to a new branch 'branch_to_create_merge_conflict'

在新分支上:


   
   
$ git branch
* branch_to_create_merge_conflict
master

进行编辑:


   
   
This is a new README file

This is an edit on the branch

现在提交该编辑:


   
   
$ vim README.md
$ git add README.md
$ git commit -m "Edits made to README on the branch"
[ branch_to_create_merge_conflict 9c5e88a ] Edits made to README on the branch
1 file changed, 2 insertions ( + )

返回master分支,用不同的内容编辑第3行的README,然后提交。

转到master分支:


   
   
$ git checkout master
Switched to branch 'master'

编辑自述文件:


   
   
This is a new README file

This is an edit on the master branch

提交编辑:


   
   
$ git add README.md
$ git commit -m "Edits made to README on the master branch"
[ master 7ea2985 ] Edits made to README on the master branch
1 file changed, 2 insertions ( + )

将分支合并到master中以查看错误:


   
   
$ git branch
  branch_to_create_merge_conflict
* master
$ git merge branch_to_create_merge_conflict
Auto-merging README.md
CONFLICT ( content ) : Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

现在,按照Git的要求进入README文件,以查看其外观:


   
   
This is a new README file

<<<<<<< HEAD
This is an edit on the master branch
=======
This is an edit on the branch
>>>>>>> branch_to_create_merge_conflict

如您所见,Git添加了一些语法,包括七个“小于”字符<<<<<<<和七个“大于”字符>>>>>>> ,以七个等号分隔, ==== === 。 可以使用您的编辑器进行搜索,以快速找到需要进行编辑的位置。

在该块中有两个部分:

  • “小于”字符表示当前分支的编辑(在本例中为“ HEAD”,这是您当前分支的另一个词),等号表示第一部分的结尾。
  • 第二部分是编辑来自尝试合并的位置; 它以等号开头,以“大于”号结尾。

作为开发人员,您可以决定保留哪些内容和保留哪些内容。 根据需要进行编辑,然后关闭文件:


   
   
This is a new README file

This is an edit on the branch

如您所见,这将保留分支的编辑。 您可以运行git status来查看更多说明:


   
   
$ vim README.md
$ git status
On branch master
You have unmerged paths.
  ( fix conflicts and run "git commit" )
  ( use "git merge --abort" to abort the merge )

Unmerged paths:
  ( use "git add ..." to mark resolution )
  both modified: README.md
no changes added to commit ( use "git add" and / or "git commit -a" )

请注意,如果遇到严重问题,可以通过运行git merge --abort中止合并来中止合并。

按照说明添加文件,然后提交:


   
   
$ git add README.md
$ git status
On branch master
All conflicts fixed but you are still merging.
( use "git commit" to conclude merge )

Changes to be committed:
modified: README.md

$ git commit
[ master 9937ca4 ] Merge branch 'branch_to_create_merge_conflict'

关键要点和进一步阅读

如果有足够的时间,任何规模的团队都将发生合并冲突。 能够头脑清醒地解决这些问题很重要。 作为一名开发人员,我不知所措地盯着10多个文件合并冲突问题。 理解合并冲突时您要查看的内容有很长的路要走。

集成开发环境中,我没有涉及合并冲突。 知道如何使用Git命令行工具(包括解决合并冲突)对于理解Git并能够在任何环境中使用Git都是必不可少的。

如果遇到困难,Git的网站和文档是不错的资源。 您可以在Git Pro书籍的高级合并部分中找到有关Git合并的高级信息,包括合并冲突解决方案。

翻译自: https://opensource.com/article/20/4/git-merge-conflict

git merge解决冲突

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值