撤消导致合并冲突的git stash pop

时间:2014-03-05 19:25:18

标签: git

我开始对我的代码库进行更改,但没有意识到我在一个旧主题分支上。为了转移它们,我想将它们藏起来,然后将它们应用到主人的新分支上。我使用git stash pop将正在进行的工作更改转移到这个新分支,忘记在创建新分支之前我没有将新的更改提取到master中。这导致了一堆合并冲突并且丢失了我的更改(因为我使用了pop)。

一旦我正确地重新创建了新分支,我如何才能恢复隐藏的更改以正确应用它们?

5 个答案:

答案 0 :(得分:482)

事实证明,Git足够聪明,如果它不能干净利落,就不会丢下藏品。通过以下步骤,我能够达到所需的状态:

  1. 要取消合并冲突:git reset HEAD .
  2. 保存冲突的合并(以防万一):git stash
  3. 返回主人:git checkout master
  4. 要提取最新更改:git fetch upstream; git merge upstream/master
  5. 更正我的新分支:git checkout new-branch; git rebase master
  6. 要应用正确的藏匿更改(现在是堆栈上的第2个):git stash apply stash@{1}

答案 1 :(得分:274)

幸运的是,git stash pop 会在发生冲突的情况下更改藏匿信息!

没什么,担心,只需清理你的代码并再试一次。

说你的代码库之前是干净的,你可以回到那个状态:​​git checkout -f
然后做你忘了的东西,例如git merge missing-branch
之后再次点击git stash pop并获得相同藏匿,之前发生冲突。

注意:存储是安全的,但工作目录中的未提交更改不是。他们可能搞砸了。

答案 2 :(得分:13)

git checkout -f

必须工作,如果您以前的状态是干净的。

答案 3 :(得分:12)

git reset --merge

最简单的命令,适用于任何地方,包括。 git stash pop

小心!您将丢失对未跟踪文件的所有更改。

答案 4 :(得分:6)

这里的说明有点复杂,所以我将提供一些更简单的方法:

  1. git reset HEAD --hard放弃对当前分支的所有更改

  2. ...根据需要执行中介工作

  3. git stash pop在以后准备好时再次重新弹出存储区