Git - 整理回购

时间:2010-05-06 12:34:52

标签: git tree tidy

我的回购已进入一个状态,并希望能够解决它的问题

回购看起来有点像这样(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

西蒙

3 个答案:

答案 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线。

再次