当我这样做时git rebase branch1,我branch1-local会发生冲突.我解决了冲突,做了git add <conflicted-add>然后git rebase --continue就像git要求我做的那样.之后,将应用新的提交.出现了新的冲突.但是再次发生同样的冲突!同一个文件!我再这样做,git add的git rebase --continue,然后这一切再次重复,直到我重复这一过程,每次提交被重建基础上.
为什么rebase让我一遍又一遍地重做同样的冲突解决方案?
故事:在一个项目的中间,我的同事从大师那里创建了一个新的分支,并开始进行繁重的重新分解工作.我从master创建了我的分支,并开始在页面上做新的东西.我们经常提交,但只有我可以修改代码才能掌握(因为同事的更改太重,无法从主服务器部署).不幸的是,我们的一些工作依赖于相同的文件.因此,经过几天的工作,她终于想要改变主人的变化,她有很多git冲突.
my_branch #---#----#-#-------#----#--#-----#---#----#----#
/ \ \ \ \ \ \
master *-------*--------------*---*---*--------------*----*----*
\ /
her branch #------#-------#-----------#-----------#------------#
Run Code Online (Sandbox Code Playgroud)
问题1是:当我们处理相同的文件时,如何防止大量的git冲突?(或者在这种情况下最佳做法是什么?)
但这不是我们问题的结束,...绝对正确她试图从主人到她的分支进行变基(为了进行我所做的更改),所以提交映射应该看起来像这样
my_branch #---#----#-#-------#----#--#-----#---#----#----#
/ \ \ \ \ \ \
master *-------*--------------*---*---*--------------*----*----*
\ \ \ /
her branch #------#-------#----*------#-----*-----#------------#
Run Code Online (Sandbox Code Playgroud)
这就是困扰我们的事情.在这些改变期间,她正在解决这些冲突.但是git不记得她关于冲突修复的决定,所以当她从主人到她的分支做另一个git rebase时,她不得不再次修复同样的git冲突,以至于她在以前的rebase 中修复了.
问题2是:如何告诉git在主分支git rebase之后记住git冲突修复,那么在下一个rebase之后我们不必再次修复相同的冲突了?
我有一个(大)提交树,其中包含几个我想要重新绑定到另一个提交的合并提交.执行正常的rebase会导致git要求我解决合并冲突.我不想审查每个合并,因为这将是很多工作.在找到--preserve-merges选项后,这里有一个很好的解释,我认为我找到了完成这项任务的完美工具.但是,我似乎无法让它正常工作.我创建了一个演示问题的玩具示例.
从空文件夹开始,我们首先创建一个带有合并的分支和另一个我们将在其上进行rebase的分支.
A---B--
\ \
---C---D
\
---E
Run Code Online (Sandbox Code Playgroud)
其中主指乙,分支指d和再见分支指È.
git init
echo Hello > Hello.txt
git add Hello.txt
git commit -m "Create Hello.txt (commit A)"
git tag start
echo World! >> Hello.txt
git commit -am "Change to Hello World (commit B)"
git checkout start
git checkout -b branch
echo Dave >> Hello.txt
git commit -am "Change to Hello Dave (commit C)"
git merge master
echo Hello …Run Code Online (Sandbox Code Playgroud) 请有人告诉我Git在合并两个分支时的历史方面.
如果我有两个分支都在积极开发并且都包含提交,这类似于以下时间轴:
Branch #1: ----(branch)----C1----------C2-------(merge)------C5
\ /
\ /
\ /
Branch #2: -----------C3----------C4
Run Code Online (Sandbox Code Playgroud)
一旦两个分支合并,分支1的历史如何看待C5(提交#5)?我的印象是Git将合并所有历史记录给我以下内容:
Branch #1: ----------------C1----C3----C2----C4--------------C5
Run Code Online (Sandbox Code Playgroud)
这是正确的理解吗?
如果是这样,在紧急情况下,如何撤消合并,因为分支#2的所有历史肯定会与分支#1的历史交织在一起.