【问题标题】:Can I undo a merge if I hadn't committed the code before it?如果我之前没有提交代码,我可以撤消合并吗?
【发布时间】:2021-09-18 03:26:04
【问题描述】:

我做了什么:

git checkout -b newbranch

对此分支进行了几处更改。那么:

git merge oldbranch

newbranch 的任何更改都未提交,因此我无法回滚。现在这些更改都没有应用,只有来自oldbranch 的代码。有没有办法撤消合并?另外我下次应该怎么做,或者我做错了什么?请帮忙。

我尝试了什么: 我在合并之前在newbranch 上使用了git stash,所以我尝试使用git apply,但这似乎也不起作用。

编辑:我认为在错误的时间也使用了 gut stash 什么的,因为我能看到的唯一变化是一行,我对 git 是全新的。

【问题讨论】:

  • 你做错的很简单:当你有未提交的更改时不要执行合并。将它们提交到某处,或use "git stash" to store them temporarily
  • 在当前版本的 Git 中,如果您进行了任何更改,git merge 通常会拒绝启动。不过,快进操作有一个例外。你使用的是什么版本的 Git? git merge 命令的输出是什么?
  • @IMSoP 我使用了 git stash,然后我尝试使用 git apply,我应该使用不同的命令来应用这些更改吗?
  • 如果您隐藏了更改,然后阅读我链接到的手册页,它会告诉您可以执行的所有命令。另外,下次你问这样的问题时,不要漏掉这样的细节——这会让整个问题变得完全不同!
  • @IMSoP 我编辑了这个问题。谢谢你。我会试试的。

标签: git git-merge git-bash


【解决方案1】:

如果你有一个不需要的提交,那么你可以使用git revert 来回滚。就您而言,如果您有东西在藏匿处,那应该不是问题。但是,最干净的解决方案是运行

git log

找到仍然需要的最后一个提交哈希,然后运行

git checkout <thehash>
git branch somenewbranch
git checkout somenewbranch

然后切换回您的分支,执行还原,加载回存储,检查 somenewbranch 并运行

git diff somenewbranch newbranch

您将看到不同之处,应用 somenewbranch 所需的内容,您应该可以使用新分支。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 2010-09-25
    相关资源
    最近更新 更多