如何撤消git merge squash?

jdi*_*ias 18 git version-control git-merge

我刚做了一个

git merge --squash feature-branch
Run Code Online (Sandbox Code Playgroud)

进入我的develop分店.

问题是上面的命令更新了头部而没有创建新的提交.我的目的是创建一个单一的提交申请到负责人develop.

简而言之,develop合并前后分支的日志完全相同.

有没有办法恢复develop到之前的状态git merge

谢谢.

根据Dan D.的评论和下面接受的答案,我能够解决我的问题.如果你在同一条船上,请看下面我做了什么:

1 - 我跑了git reflog,它列出了我对我的develop分支所做的所有提交和检查.

2 - git reset HEAD@{1}我没有按照建议进行操作,而是在最后一次提交开发时找到了我希望保留的数字.就我而言HEAD@{188}.所以我打字了git reset HEAD@{188}.

3 - 我跑了一个git log,它有一个干净的日志,只显示我做错了合并之前的提交.

4 - 我跑完git add -A .了功能开发期间创建的所有新文件.

5 - 我跑了 git commit -m "install feature-x"

6 - 结果现在我有了develop正确文件的分支,并且日志是干净的 - 只显示了我在开发过程中所做的所有更改的一次提交feature-x.

我仍然需要找出为什么我的原件git merge --squash feature-branch没有按预期工作.

解决方案2

Mark Longair的答案是解决我的问题的最终解决方案.我刚刚测试了它,它的工作原理.请参阅下面我正在使用的流程来压缩a中的所有内部提交,feature-branch并且只包含一个提交到develop分支:

git checkout develop
git merge --squash feature-branch
git commit -m "install of feature-branch"
Run Code Online (Sandbox Code Playgroud)

上面的序列就像一个魅力.

Mar*_*air 20

如果运行git merge --squash <other-branch>工作树并使用合并结果更新索引,但它不会创建提交.您需要做的就是运行:

git commit
Run Code Online (Sandbox Code Playgroud)

但是,如果您在提交之前改变主意并且只想中止合并,则只需运行:

git reset --merge
Run Code Online (Sandbox Code Playgroud)

您不需要使用reflog.