我在一个主题分支上开始做一些工作
•-•-• < topic
/
•-• < master
Run Code Online (Sandbox Code Playgroud)
我推动主题分支
$ git push origin topic
Run Code Online (Sandbox Code Playgroud)
其他人将更改推送到主人
•-•-• < origin/topic
/
•-•-•—• < origin/master
Run Code Online (Sandbox Code Playgroud)
历史应该是这样的
•-•-• < topic
/
•-•-•—• < master
Run Code Online (Sandbox Code Playgroud)
; update master
$ git checkout master
$ git fetch origin
$ git merge --ff-only origin/master
; rebase topic
$ git checkout topic
$ git rebase master
Run Code Online (Sandbox Code Playgroud)
我的所有提交topic都被认为是未提交的.所以,当我尝试时git push origin topic,我得到了
! [rejected] topic -> topic (non-fast-forward)
error: failed to push some refs to '/path/to/repo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Run Code Online (Sandbox Code Playgroud)
请注意,我不希望我的合并topic与分支master.我只想更新我的本地仓库,而不必不必要地合并分支.
Mik*_*icz 11
让我清楚地重复你的例子.
C-D-E < topic, origin/topic
/
A-B < master, origin/master
Run Code Online (Sandbox Code Playgroud)
然后有人工作.
C-D-E < topic, origin/topic
/
A-B-F-G < origin/master
^
master
Run Code Online (Sandbox Code Playgroud)
你从原点获取了F&G,然后将主题重新设置为主人.所以现在你的存储库看起来像这样.
C-D-E < origin/topic
/
A-B-F-G < master, origin/master
\
C'-D'-E' < topic
Run Code Online (Sandbox Code Playgroud)
这就是问题所在.E的原点/主题无法快速转发到E'的主题.Rebase实际上仅适用于未被推送到源的提交.由于您已经将C,D和E推送到源/主题,因此您必须在远程存储库上重写历史记录.因此错误.所以你真的有三个选择:
停止推动局部分支.如果只有你正在研究主题,那么就没有必要推动它了.只需在master上保留rebased主题,完成后,快速将master合并到topic&push master.删除本地主题分支.瞧!
合并主题和主人.如果你需要在一个主题分支上进行协作,你应该把它搞砸并合并.
强制远程rebase:
git push origin topic -f
这将迫使原点/主题为E'.除了在远程存储库中重写历史记录之外,你将拥有火与硫磺,人类牺牲,生活在一起的狗和猫,大规模的歇斯底里......以及你的开发人员并不喜欢你.根本不推荐.
; update master
git checkout master
git pull --rebase origin master
; rebase topic
git rebase master topic
; push topic (force)
git push -f origin topic
Run Code Online (Sandbox Code Playgroud)