我的回购已进入一个状态,并希望能够解决它的问题
回购看起来有点像这样(A1,B1,C1等显然是提交)
A1 ---- A2 ---- A3 ---- A4 ---- A5 ---- A6 ---- A7 ---- A8
/
(from a remote repo) B1 ---- B2 ---------------------------------
| \
\ C1 ---------------------------------C2
\ /
D1 --- D2 --- D3 --- D4 --- D5 --- D6
理想情况下,我希望能够删除B,C和D行上的所有修订(使用rebase?)(我不喜欢说分支,因为除了ref之外,这些行上现在没有本地分支分支到远程仓库)并尝试再次合并远程仓库,也许是以更好的方式。
我很感激有关如何摆脱所有这些提交的任何建议。请问任何答案都使用修订版SHA1而不是分支名称。我以为我能够以某种方式将合并恢复到A7但是不能完全弄清楚如何做到这一点
我希望这是足够的信息。很多thx
西蒙
答案 0 :(得分:1)
整洁,我认为你的意思是线性化你的变化。
您应该可以执行以下操作:
git rebase A B
git rebase 'A C
git rebase ''A D
B C和D表示参与变基的提交/参考。实际上将A B C和/或D传递给rebase可能会 nothing 。你应该这样做:
git rebase master branchname
这有帮助吗?
答案 1 :(得分:1)
重新分支分支很可能就像你想要做的那样,正如xyld建议的那样。
在您这样做之前,我建议reading up on the rebase command from chapter 3 of the Pro Git book。它应该有助于解释这个过程是如何工作的,以及你需要注意的“陷阱”。 (例如,你永远不应该将你已经推送到公共存储库的提交重新绑定,否则会将其搞砸给其他所有人......但这听起来并非如此。)
答案 2 :(得分:0)
执行时
git rebase -f 557b29ecc0ec c96769ef2f
显然正在执行rebase。但是,报告
Falling back to patching base and 3-way merge...
error: Your local changes to 'Client/WebDataEntry/temp.txt' would be overwritten by
merge. Aborting.
Failed to merge in the changes.
Patch failed at 0004 Initial Source Load
我之前添加/提交了任何更改,因此我不确定为什么要报告此更改,除了某种周期性情况或情况之外,它无法自动解决冲突,因为它已完成
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
所以我尝试以交互方式运行rebase
git rebase -i 557b29ecc0ec c96769ef2f
但我收到了错误
Invalid branchname: c96769ef2f
我或许应该补充说,我的思考/理解可能存在缺陷。我希望,因为A1和B1之间没有共同的祖先,如果我将B1(或任何后续提交)转换为A1,它将有效地吹掉B1 / C1 / D1线。
再次