我在一个分支上工作,需要在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
我想知道我做错了将来在这种情况下应该做的事情。
答案 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