我希望我的分支是最新的(不是任何提交后面),不做任何新的提交,只留下我跟踪和修改的文件。我想保留此文件中的更改。我不小心跑了“git reset HEAD~”看它做了什么,现在我无法撤消“git reset HEAD~”。
简而言之,下面是事件的顺序和我未能纠正它的尝试。
<modified file>
git reset --soft HEAD~
git stash
git merge --ff-only
git stash pop
在“git reset --soft HEAD~”命令之后,我期望以下三个命令有效地反转它。 我实际得到的是......
错误:合并将覆盖对以下文件的本地更改:
README.md
请在合并之前提交更改或存储更改
中止
非常感谢任何帮助!
答案 0 :(得分:1)
放弃使用git stash
而不是总是检查临时分支上的更改,你会好得多。事情变得更加清晰和强大,并且使得git stash的东西无法实现。
从您当前的状态运行
git checkout -b stash-branch-001
git commit -am stash
# Now all your pending changes are saved, like git stash does, but properly saved
# on a branch with all the benefits of a branch that stash cannot provide.
git checkout master
git fetch origin # Get latest and greatest from upstream
git status # Always run git status and verify before reset --hard
git reset --hard origin/master
# At this point git status should say "Your branch is up-to-date with
# 'origin/master'"
然后恢复保存的更改运行(在一般情况下):
git rebase master stash-branch-001 # Implicit changes the checked out branch...
git checkout master # ... so change back
git reset orign/master
# At this point git status should say "modified: README.md"
或者在这种特殊情况下,临时分支上只有一个提交,你只能运行
git cherry-pick stash-branch-001
git reset HEAD^
代替。满意后只需删除临时分支。
我想,大约十年前我停止使用git stash
。它提供零临时分支机构无法提供的好处。也许可以输入更少的字符,但从概念上讲,只需像往常一样办理入住和变换就可以更加简单,而不是暂时保存更改。
查看更改只是git log -p ...
,git diff ...
,gitk
或任何常规git命令,而不是只有一个特殊情况git stash show
命令。
如果您正在进行多项临时更改,请将其带入和带出 以任何顺序变得直截了当,而不是像stash一样被迫按顺序弹出它们。
在分支上签入更改可以非常灵活地允许您在任何分支(可能是多个)中恢复临时更改,而git stash pop
在其要求中非常有限:The working directory must match the index.
。
总而言之,帮自己一个忙,停止使用git stash
。