Git - 整理存储库

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行上的所有修订版本(使用rebase?),并尝试以更好的方式再次合并远程存储库。由于这些行上现在没有本地分支(除了对远程存储库的ref分支),因此我不愿意说“分支”。如果有任何建议如何摆脱所有这些提交,我将不胜感激。请使用修订SHA1而不是分支名称来回答。我认为我可以还原到A7的合并,但无法完全弄清楚如何做到这一点。希望这些信息足够了解我的问题。非常感谢。Simon
3个回答

1

通过“整理”,我假设你的意思是将你的更改线性化。

你应该能够做到类似于:

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

在重新设置分支时,A、B、C和D代表着涉及到的提交/引用。实际上,将A、B、C和/或D传递给rebase命令可能不会起到任何作用。你应该像这样操作:

git rebase master branchname

这有帮助吗?


我尝试了 git rebase A7-SHA1 B1-SHA1 但好像没有任何变化。这就是你的意思吗? - Simon Woods
抱歉,我没有表达清楚!我输入的命令是 git rebase c96769ef2f 557b29ecc0。 - Simon Woods
Rebase是分支操作的一种。只需在您想要操作的提交处创建本地分支,进行操作,将所需内容推送,然后删除这些分支即可。 - Phil Miller
它也适用于SHA1吗?当我执行该命令时,它显然会对中间提交进行某些操作。我会添加更详细的回复...谢谢您的回应。 - Simon Woods

1

像xyld建议的那样,重新定位分支可能是您想要做的。

在这之前,我建议您阅读《Pro Git》书第3章中关于rebase命令的内容。它应该有助于解释该过程的工作原理以及您需要注意的“陷阱”。(例如,您不应该重新定位已经推送到公共存储库的提交,否则会为其他人造成麻烦...但这似乎不是这里的情况。)


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

所以我尝试交互式地运行rebase

git rebase -i 557b29ecc0ec c96769ef2f

但是我收到了错误提示

Invalid branchname: c96769ef2f

我应该补充说明,我的思考/理解可能存在缺陷。我希望,由于A1和B1之间没有共同的祖先,如果我将B1(或其后续提交中的任何一个)变基到A1上,它将有效地消除B1/C1/D1线。

再次感谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接