隐藏在另一个分支中进行更改并返回

时间:2019-06-27 14:42:41

标签: git

我在一个分支上工作,需要在master分支中修复某些问题。我还没有准备好提交,所以我藏了一些更改以尝试返回。我使用的命令管道是:

git stash
git checkout master
git pull
==> fixed code in file file.py
==> made changes in file2.py that I don't want to keep
git add file.py
git commit -m'fixed stuff'
git push
git checkout initial_branch
git stash apply stash@{0}

哪个给了我错误:

error: Your local changes to the following files would be overwritten by merge:
        file2.py
Please, commit your changes or stash them before you can merge.
Aborting

我想知道我做错了将来在这种情况下应该做的事情。

2 个答案:

答案 0 :(得分:2)

最有可能发生的事情是,在接下来的步骤中,您还更改了file.py之外的一个或多个文件:

==> fixed code in file file.py

这会使您的工作目录进行其他更改。然后,当您尝试应用存储时,Git拒绝这样做,因为存储中的更改会导致无法协调的合并冲突。

要纠正当前情况,您应该在git status分支中提交修补程序后运行master 。理想情况下,您应该已经看到一条消息,上面写着“工作目录干净,无需提交”。如果您看到了该消息,那么应用存储应该不会有问题。

顺便说一句,如果您只想将堆栈应用到堆栈的顶部,则可以简化为:

git stash apply

编辑:

根据您问题的更新,有问题的文件为file2.py。如果您不想更改该文件,则应将其重置:

git checkout -- file2.py

执行完此操作后,git status应该干净,并且应用隐藏功能应该没有问题。

答案 1 :(得分:1)

另一种进行方法是稍后提交

git commit -am "temp - do not push"

然后,您将能够毫无问题地更改分支/合并。

当您想从分支机构返回以前的工作时,

git reset HEAD^

只会撤消提交,但将更改保留在工作树(实际文件)中。

主要优点是:您未完成的工作不会在存储列表(也可以有many other irrelevant things)中“徘徊”,而是停留在相关分支上。


另外,要使所有这些都更实用,请使用别名

git config --global alias.save 'git commit -am "saved work - do not push"'

git config --global alias.reload 'git reset HEAD^'

然后可以将工作中断放大为

# at this point you're working on branch feature-XYZ

# you need to quickly let this aside and work on hotfix-ABC
git save
git checkout hotfix-ABC

# work on the branch, commit, push, anything

# then the fire is put up, you can get back to your previous dev
git checkout feature-XYZ
git reload