Jak*_*ake 16 git git-merge git-branch
情况:从A我分支的硕士开始并做了一些改变,B然后合并了那个分支(C).做一些更多的变化,我在后,D却发现我需要而没有分支发生的变化将代码部署.如果我不合并它本来没问题.
A_______C___D
\ /
\_B_/
Run Code Online (Sandbox Code Playgroud)
首先,我想知道我应该从这里做什么来部署代码,好像合并从未发生过一样.注意:没有在分支中编辑的相同文件在主服务器中编辑过.
其次...
我没有时间找出处理这个问题的最佳方法,所以我删除了分支添加的文件,并手动还原了分支中的一些编辑然后提交了部署结果(F)
A_______C___D___F
\ /
\_B_/
Run Code Online (Sandbox Code Playgroud)
我希望能够继续开发分支并F将来自主服务器的任何更改合并到其中以使其保持最新,但如果我这样做,我创建的内容将被合并并导致文件被删除并且编辑被还原.处理这个问题的最佳方法是什么?
Gau*_*ier 16
您可以使用rebase一步完成:
git rebase --onto A C D
Run Code Online (Sandbox Code Playgroud)
我刚测试了这个,并得到了适当的结果:
$ edit test.txt
$ git add .
$ git commit -mA
$ git checkout -b the_branch
$ edit test.txt
$ git commit -a -mB
$ git checkout master
$ git merge master the_branch --no-ff
$ edit test.txt
$ git commit -a -mD
Run Code Online (Sandbox Code Playgroud)
从这里你可以了解你描述的情况.然后:
$ git rebase --onto <SHA1-for-A> <SHA1-for-C> master
Run Code Online (Sandbox Code Playgroud)
rebase从C(排除)提交到master,转到A.我需要解决一些冲突,因为我在B和D的相同位置进行了修改,但我认为你不会.
_D'
/
/
A_______C___D
\ /
\_B_/
Run Code Online (Sandbox Code Playgroud)
Doc git rebase --onto,或多或少是您的情况:http:
//git-scm.com/docs/git-rebase
如果你有:
A_______C___D___F
\ /
\_B_/
Run Code Online (Sandbox Code Playgroud)
,那你现在有:
_D'___F'_(master)
/
/
A_______C___D___F
\ /
\_B_/(the_branch)
Run Code Online (Sandbox Code Playgroud)
从这里开始,将master中的更改合并到分支中很容易.F'完全放弃提交.
$ git checkout master # if you were not here already
$ git branch old_fix # if you want to be able to return to F' later
$ git reset --hard <SHA1-to-D'>
Run Code Online (Sandbox Code Playgroud)
在上面的命令之后你有:
(master)
/
_D'___F'_(old_fix)
/
/
A_______C___D___F
\ /
\_B_/(the_branch)
Run Code Online (Sandbox Code Playgroud)
要将master的更新合并到the_branch中:
$ git checkout the_branch
$ git merge master
Run Code Online (Sandbox Code Playgroud)
......并解决冲突.