git-stash更改而不还原

问题描述 投票:7回答:3

我使用Git处理一个项目。每隔一段时间我发现自己想要保存我的更改,而不是提交它们,只是作为备份,然后继续工作。我通常做的是git stash然后立即git stash apply将代码恢复到与存储之前相同的状态。我遇到的问题是git stash会恢复我的工作目录,所以即使我立即应用存储文件和项目也必须重建,因为它们似乎已经改变了。这非常令人讨厌,因为我们的一些项目需要很长时间才能构建。

所以我的问题是,有没有办法存储我的更改而不还原?如果stash不这样做,git中是否还有其他命令可以执行此操作?谢谢。

git git-stash
3个回答
1
投票

看起来您想要一种临时存储更改的方法,以便您不会意外删除它们,可以回滚。

最好的方法是在本地实际提交更改。

典型的工作流程如下:

vim myfile # make some changes
git add myfile
git commit -m "temp changes 1"
vim myfile # make more changes
git commit --amend
git diff HEAD~1 # See the changes you've made compared to last HEAD.

这样做的缺点是你的“本地更改”没有被修改。

另一种方法是继续将本地工作保存为不同的提交,然后在发送补丁/ PR之前简单地压缩它们以便进行抛光。

这看起来像这样:

vim myfile2 # make changes
git add myfile2
git commit -m "temp changes dated X"
vim myfile2 # more changes
git add myfile2
git commit -m "temp changes dated Y"

然后在发送之前简单地做这样的事情。

git rebase -i HEAD~N # Where N is the number of local commits you made
# Squash them, by changing 'pick' to 'squash' in your editor.
# Send them away
git push origin dev 

1
投票
git stash && git stash apply

如果你喜欢你的藏匿与评论:

git stash save “stash comment” && git stash apply

1
投票

当我发布这个问题时,我是git的新手并且完全不了解它的强大功能。现在我意识到存储不是我需要的东西,而且git的本地分支机构可以更好地完成工作。

假设您在main_branch上,您希望保持干净,不受实验性更改的影响。

只需创建一个新分支即可存储实验性更改。

git checkout -b temp_branch

假设您进行了一些更改并希望保存进度。简单地提交,没有什么可担心的,这一切都在temp_branch上:

git commit -a -m "first change"

假设您进行了一些更改并想再次存储:

git commit -a -m "second change"

最后,假设您对实验性更改感到满意,并希望将它们合并到主分支。有两种情况:

1)如果要合并所有更改,请执行以下操作:

git fetch . temp_branch:main_branch

这会将temp_branch的所有更改带入main_branch,而无需切换到主分支,这意味着您的文件不会被修改,也不需要重新编译。请注意,只有在此期间您还没有对main_branch进行任何其他更改。如果main_branch已经改变,你需要使用git mergegit rebase,但是这个场景超出了问题的范围。

2)假设您只想将temp_branch的一些提交合并到main_branch中。你可以用git cherry-pick做到这一点。首先执行git checkout main_branch切换到main_branch(这会修改文件,但这是不可避免的,因为你要删除一些更改),然后执行git cherry-pick <SHA>(其中<SHA>是要合并的提交的哈希值)。你可以通过git log temp_branch查看提交列表。请注意,仅合并某些更改可能会产生您需要解决的冲突。

© www.soinside.com 2019 - 2024. All rights reserved.