假设我有以下情况:
用户Foo有一个存储库main。用户栏派生此存储库,因此两个存储库是同步的。现在user Bar实现了一个特性,并创建了一个名为"barbranch“的本地分支。当用户栏完成了一个特性的实现时,Foo提交了一些东西并将其推送到主存储库。所以基本上情况看起来是这样的:
A---B---C---D main repository
\
E forked repository (where C=E)
\
F barbranch on forked repository现在如何才能让用户Foo的repo中的内容恢复正常呢?
我天真地说:
# switch to the local master and merge barbranch into it
git checkout master
git pull
git pull upstream
git push
git merge barbranch
# merge conflicts occur
vi somefile
git commit -a
git rebase origin master
# this conflict occurs again
vi somefile
git commit -a
git status # says I'm on (no branch) ?!
git push
g it checkout master
# conflict occurs again!
vi somefile
git commit -a
git push
# send merge request to user Foo最后,这给了我三个难看的提交,而不是一个。
查看git-rebase文档,我发现了git rebase --onto ...。虽然我不能确定确切的命令是什么,以及整个过程最终会是什么样子。
发布于 2011-06-22 23:59:37
这取决于你想要得到的树。
如果你想要一个表示真实工作历史的树,你不应该使用"rebase“,而应该只使用"merge”。
# on bar repo
git fetch upstream
git checkout master
git merge upstream/master (fast-forward)
git merge barbranch
# resolve conflicts (adding resolved files)
git commit
git push upstream master如果你想“线性化”rebase的工作,下面是你应该做的:
# on bar repo
git fetch upstream
git checkout master
git merge upstream/master (fast-forward)
git checkout barbranch
git rebase master
# resolve conflicts + commits (each commit will be processed separately: so you may need to do that several times if various commits are in conflict with the upstream)
git checkout master
git merge barbranch **(fast-forward after the rebase)**
git push upstream master发布于 2011-06-22 23:54:53
我认为下面的场景应该适合您的情况。
将关于冲突签出的更改master
中
这实际上将导致3次提交到您的主服务器中(您将拥有提交E&F和您的冲突解决提交)。
https://stackoverflow.com/questions/6442621
复制相似问题