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
Git 分支上的合并失败已恢复为上一次提交_Git - Fatal编程技术网

Git 分支上的合并失败已恢复为上一次提交

Git 分支上的合并失败已恢复为上一次提交,git,Git,昨天我在一个功能分支上工作,并与develop合并。更新在某些方面阻止了我,因此我签出了分支的上一次提交。从那时起,我做了更多的承诺。今天,我想再次合并到develope中,以获取以前阻止我的更改,但我的分支认为它与develope是最新的,尽管我可以从代码中看出它不是最新的。我已将另一个功能分支合并到develop中,并再次尝试查看新的develop ref是否有帮助,但当我尝试将develop合并到我的功能分支中时,我看到: Merge made by the 'recursive' str

昨天我在一个功能分支上工作,并与develop合并。更新在某些方面阻止了我,因此我签出了分支的上一次提交。从那时起,我做了更多的承诺。今天,我想再次合并到develope中,以获取以前阻止我的更改,但我的分支认为它与develope是最新的,尽管我可以从代码中看出它不是最新的。我已将另一个功能分支合并到develop中,并再次尝试查看新的develop ref是否有帮助,但当我尝试将develop合并到我的功能分支中时,我看到:

Merge made by the 'recursive' strategy
1 file changed...
因此,这是从另一个分支获取更改,而不是从我感兴趣的分支获取更改。我是否需要使用递归以外的策略运行合并

非常感谢您的任何想法

C

As,这是:

所以我签出了我分支的上一个提交。从那时起,我做了更多的承诺

建议您创建了一个匿名分支(位于“分离头”上),现在只能在reflog中找到其提交

要将它们取回,请使用
git reflog
显示“导致
HEAD
改变的事情”列表。在日志中,您将看到以下内容:

d1574b8 HEAD@{15}: checkout: moving
     from 11d9593a8479fb8b069eb81ff4368637186122bb to master
11d9593 HEAD@{16}: commit: example
9c4ea50 HEAD@{17}: checkout: moving from master to HEAD~3
11d9593
(或其长版本)这样的值是原始SHA-1;
HEAD@{number}
字段是拼写SHA-1的简写方式(有时不那么短)。大括号内的数字会随着时间的推移而变化,
HEAD@{0}
是最新的,因为您在
HEAD
上执行各种操作,例如
git checkout
git commit
,但SHA-1是永久的。1

如果要恢复提交,例如我在上面所做的一个名为
example
的提交,可以先给它一个名称,这样就不必记住它的编号,并且在reflog条目过期后它也不会被删除。对于名称,可以使用分支:

git branch recovered-as-branch 11d9593
或标签:

git tag recovered-as-tag 11d9593
(使用您喜欢的任何名称;请注意,
恢复为任何名称都是一个可怕的名称,除非用作示例)

这里的区别在于,如果您将其设置为分支,您可以使用
git checkout
进入它并添加更多提交,分支名称将随着这些新提交向前移动,就像任何其他分支一样;如果你把它做成一个标签,你仍然可以在上面执行
git checkout
,但是你会再次回到“分离头”模式,因此如果你做更多的提交,它们将只在reflog中找到,就像你这次遇到的情况一样。(这并没有什么错,事实上,在这种“分离头”模式下,有一些技巧实际上更容易做到。例如,
git-rebase
interactive-rebase脚本就是这样做的。分离头模式的主要问题是,如果忘了自己在其中,很容易忘记东西。)



1好的,永久性的,直到reflog条目本身过期并且提交被“垃圾收集”。默认情况下,
HEAD@{42}
之类的Reflog条目将在30到90天内过期,不过您可以在git配置中更改此设置。

我认为您可能在任何分支上都没有进行某些提交(通过在除分支头之外的提交之上进行提交)。这些搁浅的提交无法合并,很难恢复。你可能得查一下他们的裁判,然后把他们挑到一个新的树枝上。