git-stash 更改而不恢复

标签 git git-stash

我使用 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 mergegit 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/

相关文章:

Git 分支与提交

git丢弃专门更改暂存区

Github 更新存储库

python - 是否可以让所有 "git diff"命令在所有 git 项目中使用 "Python diff"?

git - 为什么git check out origin/master导致HEAD分离

git - 在 git 中强制 merge 的最佳方法是什么?

git - 是否有图形方式来 git stash/unstash 单个文件?

git - 撤销意外的 git stash pop

git - .git/log 的目的是什么

git - 为什么 'Save' 在 git stash 手册中不存在