4

我已经让我的回购进入了一个状态,并希望能够摆脱它

回购看起来有点像这样(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 行上的所有修订(使用变基?)(我不愿意说分支,因为现在这些行上除了 ref 分支之外没有本地分支到远程仓库)并尝试再次合并远程仓库,也许以更好的方式。

对于如何摆脱所有这些提交的任何建议,我将不胜感激。我能否要求任何答案都使用修订版 SHA1 而不是分支名称。我以为我能以某种方式将合并恢复到 A7,但不知道该怎么做

我希望这是足够的信息。很多谢谢

西蒙

4

3 回答 3

1

正如 xyld 所建议的那样,重新调整分支很可能是您想要做的。

在您这样做之前,我建议您阅读 Pro Git book 第 3 章中的 rebase 命令。它应该有助于解释该过程的工作原理以及您需要注意的“陷阱”。(例如,您永远不应该对已经推送到公共存储库的提交进行变基,否则会为其他所有人搞砸......但听起来不像这里的情况。)

于 2010-05-06T16:03:24.017 回答
1

通过整洁,我假设您的意思是线性化您的更改。

您应该能够执行以下操作:

git rebase A B
git rebase 'A C
git rebase ''A D

ABC 和 D 代表变基中涉及的提交/引用。实际上将 ABC 和/或 D 传递给 rebase 可能什么都不做。你应该这样做:

git rebase master branchname

这有帮助吗?

于 2010-05-06T12:42:06.773 回答
0

当我执行

git rebase -f 557b29ecc0ec c96769ef2f

它显然是在执行变基。然而,它报告

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".

所以我尝试以交互方式运行变基

git rebase -i 557b29ecc0ec c96769ef2f

但我得到了错误

Invalid branchname: c96769ef2f

我也许应该补充一点,很可能是我的想法/理解有缺陷。我希望由于 A1 和 B1 之间没有共同的祖先,如果我将 B1(或其任何后续提交)重新设置到 A1 上,它将有效地将 B1/C1/D1 线吹走。

再次感谢

于 2010-05-06T16:39:25.527 回答