Git 从2个基准之间提取单个提交
我有一个母版的分支,叫做a,我想在B上创建一个新的分支。除了我搞砸了,在母版的基础上创建了B 期望的:Git 从2个基准之间提取单个提交,git,Git,我有一个母版的分支,叫做a,我想在B上创建一个新的分支。除了我搞砸了,在母版的基础上创建了B 期望的: master \ A \ B 实际: master \ \ A B B只有一个我需要的提交,但因为它基于master而不是A,所以差异很大。更糟糕的是,我尝试了git-rebase-iaa并压扁了除了我想看到的一个commit之外的所有内容,但这似乎只是再次从master上重新设置了基址。现在我有一个reflog,它基本上是这样的: B@{0}
master
\
A
\
B
实际:
master
\ \
A B
B只有一个我需要的提交,但因为它基于master而不是A,所以差异很大。更糟糕的是,我尝试了git-rebase-iaa
并压扁了除了我想看到的一个commit之外的所有内容,但这似乎只是再次从master上重新设置了基址。现在我有一个reflog,它基本上是这样的:
B@{0}: rebase: B onto master
B@{1}: commit
B@{2}: rebase: B onto master
B@{3}: branch B created
我需要弄清楚的是,如何只得到一个提交,并将其建立在一个基础上,这样我就可以在差异不大的地方发出请求
编辑:可能需要注意的是,A不是master的最新版本,它仍然有许多提交延迟。因此,错误地重定基准的B现在“领先”于A
但因为它是基于大师的,而不是一个伟大的差异是巨大的
不过,你可以试着
然后你可以用
如果该B
commit是重新基础的结果,那么您确实可以在(清除之前的默认90天)中找到它。您还可以确定正确的旧B:
git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)' B
git reflog--format='%C(auto)%h%以下是我解决问题的方法:
我在a的基础上创建了一个新分支,叫做C
git checkout A
git checkout -b C
然后我做了git cherry pick SHA-B
,其中SHA-B
是我想要的提交中的SHA,谢天谢地,它保存在reflog中(B@{1}
来自原始帖子)。然后我所要做的就是解决冲突并提交。您的git reflog
是否仍然包含B中未取消的提交?如果是这样,您可能可以使用将这些提交应用于A。请注意,B的reflog(git reflog B
)将保留(默认情况下保留30天)所有原始提交(在不适当的重新基址之前),以便您可以将其取回。在这种情况下,我认为B{3}
应该是一次提交,或者可能是B{1}
@OSH这成功了,谢谢!当我使用git apply--stat patch_filename.patch时,我仍然看到一个巨大的差异。。。这是意料之中的事,还是我应该只在这里看到我想要的承诺?@JoshK Cherry挑选似乎更容易。我对你的职位投了更高的票。
git checkout A
git checkout -b C