首先回答标题中的问题:
应用藏匿的变化是从什么樱桃采摘提交完全不同。
当您应用隐藏的更改时,存储器中的更改将作为未提交的编辑文件应用于工作树中。
樱桃挑选一个提交,就是说你想在一个指定的提交中应用“diff”到当前分支并进行提交。你基本上只是从任何地方选择一个提交,并将其作为当前分支上的下一个提交。例如,如果您在错误的分支上进行了一些提交,并且您希望稍后将它们选择到正确的分支,那么这很有用。
然后解释两个命令序列之间的差:
有相当一些差异。
git checkout some-branch
# (make some local changes)
git stash save
在实践中是完全一样:
git checkout some-branch
# (make some local changes)
git commit -a -m "My manually stashed away changes"
git reset --hard origin/some-branch
在这两种情况下,你最终会停留在“一些分支”有没有存在新的局部变化,但“藏”走。在第一种情况下,当你输入“git stash list”时,隐藏的变化将会出现,而在第二种情况下,你将不得不运行“git reflog”来找到“隐藏”的变化。
在你的第一个案例(1)中,你之后做了一个“git stash pop”。它会直接撤消上一行(git stash save)。它会将隐藏的更改添加回本地工作树,但不会添加任何新的提交。 HEAD仍将指向原来的“某个分支”。它还会从“git存储列表”的输出中删除存储条目。
在你的第二个案例(2)中,你做了一个“git cherry-pick SHA1”。这将直接撤销前面的命令(git reset --hard)。你会得到提交。为了得到相同的情况下,(1),你必须运行
git commit -a -m "too lazy to write a good messsage"
后“混帐藏匿弹出”
我们也可以说:
git checkout some-branch
# (make some local changes)
git stash save
git stash pop
是多还是少一样:
git checkout some-branch
# (make some local changes)
git commit -a -m "My manually stashed away changes"
git reset origin/some-branch # without --hard
两个基本上无所作为(不考虑你得到“无法访问”承诺,你会能够在reflog中找到。请注意,无法访问并不意味着您无法恢复它们。)
我有点困惑......它看起来像是在“将”更改“移动”到原来的位置,对吗?在第一种情况下,你将变化存储起来立即弹出;这没有我能想到的净效果。您仍然在工作树中进行更改并未提交。在第二种情况下,除非你的分支在这个序列开始时先于原点,樱桃选择只是将变化“移动”到他们已经存在的位置......我在这里错过了什么? –