Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 从2个基准之间提取单个提交_Git - Fatal编程技术网

Git 从2个基准之间提取单个提交

Git 从2个基准之间提取单个提交,git,Git,我有一个母版的分支,叫做a,我想在B上创建一个新的分支。除了我搞砸了,在母版的基础上创建了B 期望的: master \ A \ B 实际: master \ \ A B B只有一个我需要的提交,但因为它基于master而不是A,所以差异很大。更糟糕的是,我尝试了git-rebase-iaa并压扁了除了我想看到的一个commit之外的所有内容,但这似乎只是再次从master上重新设置了基址。现在我有一个reflog,它基本上是这样的: B@{0}

我有一个母版的分支,叫做a,我想在B上创建一个新的分支。除了我搞砸了,在母版的基础上创建了B

期望的:

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