故事背景:在项目中途,我的同事从master创建了一个新分支并开始进行重构工作。我从master创建了自己的分支并开始在页面上添加新功能。虽然我们都经常提交代码,但只有我能够将代码合并到master(因为同事的更改太多,尚不能从主分支部署)。不幸的是,我们的一些工作依赖于相同的文件。所以在几天的工作后,当她想要将自己的更改合并到master时,她遇到了很多Git冲突。
my_branch #---#----#-#-------#----#--#-----#---#----#----#
/ \ \ \ \ \ \
master *-------*--------------*---*---*--------------*----*----*
\ /
her branch #------#-------#-----------#-----------#------------#
问题1是: 如何避免在多人同时修改同一文件时出现大量的git冲突?(或者在这种情况下最佳实践是什么?)
但这并不是我们问题的结束,...为了绝对正确,她试图从主分支进行变基到自己的分支(以获得我提交的更改),因此提交记录应该看起来像这样
my_branch #---#----#-#-------#----#--#-----#---#----#----#
/ \ \ \ \ \ \
master *-------*--------------*---*---*--------------*----*----*
\ \ \ /
her branch #------#-------#----*------#-----*-----#------------#
这就是困扰我们的问题所在。在这些变基过程中,她正在解决这些冲突。但是 Git 不会记住她对冲突修复的决定,因此当她从 master 变基到 her-branch 时,她不得不再次修复相同的 Git 冲突,这些冲突之前已经被她修复过了。问题2是:如何告诉 Git 记住从主分支(master)进行 Git 变基后的 Git 冲突修复,这样在下一次变基之后,我们就不必再次修复相同的冲突了?
git merge
而不是git rebase
。是的,有些人说使用merge
会导致不正确的历史记录,这是不正确的。观看 https://www.youtube.com/watch?v=1ffBJ4sVUb4 以了解 git 中的所有内容(+rebase
实际上可能是破坏性的)。我的观点是git merge
更加高效。我想这就是为什么 GitHub 在处理拉取请求时也使用merge
的原因。 - equivalent8merge
更加实用,否则10%的时间将会花费在解决rebase冲突上。 - equivalent8