git merge解决冲突
Git是开放源代码项目和许多封闭源代码项目的标准源代码存储库管理器。 本文向新的Git用户展示了如何做一些稍微先进但对它的目的至关重要的事情:解决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在其错误消息中提供了解决冲突的线索。 它说[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添加了一些语法,包括七个“小于”字符<<<<<<<和七个“大于”字符>>>>>>> ,以七个等号分隔, ==== === 。 可以使用您的编辑器进行搜索,以快速找到需要进行编辑的位置。
在该块中有两个部分:
作为开发人员,您可以决定保留哪些内容和保留哪些内容。 根据需要进行编辑,然后关闭文件:
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解决冲突