git-checkout 的非确定性行为
Non-deterministic behavior of git-checkout
我试图理解 git 的这种行为。它与提交的文件删除和保存有关。
假设我最近在一个名为 fork1 的分支中工作。我通过 "git checkout fork1" 到达那里。然后我删除了一个名为 first.bsh 的文件。 (不是 git rm,只是 rm)。如果我这样做 "git checkout fork1",它会产生一条消息:
Already on 'fork1'
D first.bsh
注意到文件丢失了。尽管已结帐,但仍未恢复。
然后我做 "checkout master" 然后 "checkout fork1"。至此,文件被恢复。命令的顺序似乎会影响 "checkout fork1" 的作用。这是令人惊讶的,而且看起来不像是理想的行为。在一种情况下,这是 "respecting" 我的删除,但在另一种情况下则不是。这是什么逻辑?
当您使用 git checkout
更改活动提交时:git
将尝试协调您的本地更改与差异 "old HEAD <-> new HEAD"。
如果您的本地修改说 "file first.bsh
is deleted",并且 master
上不存在文件 first.bsh
,git
会说 "hey ! we're good !" 并努力移动您的活动致力于掌握。
行为的区别在于改变活动提交——"keep pending changes"策略是一种启发式的并且可能是有损的——和保持原样。
最安全的做法是在切换之前提交您的工作或 运行 git stash
。
我试图理解 git 的这种行为。它与提交的文件删除和保存有关。
假设我最近在一个名为 fork1 的分支中工作。我通过 "git checkout fork1" 到达那里。然后我删除了一个名为 first.bsh 的文件。 (不是 git rm,只是 rm)。如果我这样做 "git checkout fork1",它会产生一条消息:
Already on 'fork1'
D first.bsh
注意到文件丢失了。尽管已结帐,但仍未恢复。
然后我做 "checkout master" 然后 "checkout fork1"。至此,文件被恢复。命令的顺序似乎会影响 "checkout fork1" 的作用。这是令人惊讶的,而且看起来不像是理想的行为。在一种情况下,这是 "respecting" 我的删除,但在另一种情况下则不是。这是什么逻辑?
当您使用 git checkout
更改活动提交时:git
将尝试协调您的本地更改与差异 "old HEAD <-> new HEAD"。
如果您的本地修改说 "file first.bsh
is deleted",并且 master
上不存在文件 first.bsh
,git
会说 "hey ! we're good !" 并努力移动您的活动致力于掌握。
行为的区别在于改变活动提交——"keep pending changes"策略是一种启发式的并且可能是有损的——和保持原样。
最安全的做法是在切换之前提交您的工作或 运行 git stash
。