我开始对我的代码库进行更改,但没有意识到我在一个旧主题分支上。为了转移它们,我想将它们藏起来,然后将它们应用到主人的新分支上。我使用git stash pop
将正在进行的工作更改转移到这个新分支,忘记在创建新分支之前我没有将新的更改提取到master中。这导致了一堆合并冲突并且丢失了我的更改(因为我使用了pop)。
一旦我正确地重新创建了新分支,我如何才能恢复隐藏的更改以正确应用它们?
答案 0 :(得分:482)
事实证明,Git足够聪明,如果它不能干净利落,就不会丢下藏品。通过以下步骤,我能够达到所需的状态:
git reset HEAD .
git stash
git checkout master
git fetch upstream; git merge upstream/master
git checkout new-branch; git rebase master
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)
这里的说明有点复杂,所以我将提供一些更简单的方法:
git reset HEAD --hard
放弃对当前分支的所有更改
...
根据需要执行中介工作
git stash pop
在以后准备好时再次重新弹出存储区