我使用 Git 从事一个项目。每隔一段时间,我发现自己想要保存我的更改,而不是提交它们,只是作为备份,然后继续工作。我通常做的是 git stash
然后立即 git stash apply
将代码恢复到存储前的状态。我遇到的问题是 git stash 恢复了我的工作目录,所以即使我立即应用了 stash 文件和项目也必须重建,因为它们似乎已经改变。这很烦人,因为我们的一些项目需要很长时间才能构建。
所以我的问题是,有没有办法在不恢复的情况下 stash 我的更改?如果 stash 不这样做,那么 git 中是否还有其他命令可以做到这一点?谢谢。
最佳答案
当我发布这个问题时,我是 git 的新手,并没有完全理解它的力量。现在我意识到存储不是我所需要的,而 git 的本地分支可以更好地完成这项工作。
假设您在 main_branch 上,您希望它不受实验性更改的影响。
只需创建一个新分支即可存储您的实验更改。
git checkout -b temp_branch
假设您做了一些更改并想保存您的进度。只需提交,无需担心,一切都在 temp_branch 上:
git commit -a -m "first change"
假设您做了更多更改并想再次存储:
git commit -a -m "second change"
最后,假设您对实验性更改感到满意并希望将它们 merge 到主分支。有两种情况:
1) 如果要 merge 所有更改,请执行以下操作:
git fetch . temp_branch:main_branch
这会将 temp_branch 的所有更改都带到 main_branch 中,而无需切换到主分支,这意味着您的文件没有被修改,也不需要重新编译。请注意,只有当您在此期间没有对 main_branch 进行任何其他更改时才有可能。如果 main_branch 已更改,则需要使用 git merge
或 git rebase
, 但这种情况超出了问题的范围。
2) 假设您只想将 temp_branch 的部分提交 merge 到 main_branch 中。你可以用 git cherry-pick
做到这一点.先做git checkout main_branch
切换到 main_branch(这会修改文件,但这是不可避免的,因为您要放弃一些更改),然后执行 git cherry-pick <SHA>
(其中 <SHA>
是您要 merge 的提交的哈希值)。您可以通过执行 git log temp_branch
查看提交列表.请注意,仅 merge 部分更改可能会产生您需要解决的冲突。
关于git-stash 更改而不恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39412407/