git-checkout的不确定行为

问题描述 投票:-1回答:1

我正在尝试理解git的这种行为。它与文件的删除和提交的保存有关。

假设我最近在一个名为fork1的分支中工作。我通过执行“ git checkout fork1”到达那里。然后,我删除一个名为first.bsh的文件。 (不是git rm,只有rm)。如果我执行“ git checkout fork1”,则会生成一条消息:

Already on 'fork1'
D       first.bsh

注意文件丢失。尽管已签出,仍无法还原。

然后我执行“结帐主”,然后执行“结帐fork1”。此时,文件已还原。看来命令的顺序会影响“ checkout fork1”的作用。这是令人惊讶的,并且似乎不是理想的行为。一种情况是“尊重”我的删除,而另一种情况是“尊重”我的删除。这是什么逻辑?

git git-checkout
1个回答
1
投票

[当您使用git checkout更改活动提交时:git将尝试以差异“旧HEAD新HEAD”调和您的本地更改。

[如果您的本地修改说“删除文件first.bsh”,并且文件first.bshmaster上不存在,则git会说“嘿!我们很好!”并努力将您的活动提交移至master。

[行为上的区别在于更改活动的提交之间–“保持未决的更改”策略是一种启发式方法,可能会造成损失–停留在您的位置。


最安全的选择是在切换之前提交您的工作或运行git stash

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