2014-09-21 117 views
1

假设我有五个修改过的文件,并且我将它们中的两个放在了commit处(我们称之为commit A)。然后,我仍然有三个未提交的更改留给未来的提交。现在假设在将来某个时候我决定将我的工作目录恢复为提交A,那么这些文件的状态将不会提交给A,而是会被修改。这些变化会丢失吗?Git阶段和提交 - 恢复时未提交的文件会发生什么?

+1

如果您在问题中使用特定命令而不是使用其他版本控制系统的随机术语,会更好。我只能猜测你在说'git reset',你可以通过指定'--soft',' - mix'或'--hard'来明确地选择索引和工作树会发生什么。 – 2014-09-21 15:08:44

+2

同意; “恢复”在Git中是一个精确的术语,但通常用于表示更多类似于该工具的新用户的“重置”。你能描述一下你想要做的更详细的事情吗? – 2014-09-21 16:03:47

+0

@EdwardThomson在这里发表评论以及那些由FractalSpace提供的答案,我认为我已经开始融合到这样的理解:我一直在想的是git reset,而不是回复。 – deepak 2014-09-23 13:26:45

回答

2

A git revert只会修改正在恢复的commitA的文件。
它不会触及任何其他文件。

这就是说,这可能是一个好主意,以保存这些文件,只是为了确保(git stash)没有发生任何事情“出错”。

1

无论您当前的分段情况如何,提交'A'的'还原'仅会在顶部创建一个新的提交(例如A *),这会反转提交A的影响。您需要启动使用干净的工作目录恢复进程(即隐藏或提交修改/暂存的文件)。

+1

好吧,通过将更改恢复到索引来恢复工作。因此,如果没有进一步确定实际发生的上演和未上演的变化,他们就不会“参与”,这似乎是过分简单的。 – 2014-09-21 13:10:27

+1

正确。实际上,如果存在任何分步或修改的文件(编辑我的答案),'git revert'将会被阻止。 – FractalSpace 2014-09-21 15:01:58

+0

所以如果我理解正确,我的工作副本将被更改以反映提交A中的更改,但其他文件中的部分工作不会显示出来?即无法恢复其他文件中的部分工作。这意味着在恢复之后,我的非工作副本并不是早期工作副本的确切复制。 (我明白我的期望可能并不完全可行......) – deepak 2014-09-21 15:38:50