2011-07-04 32 views
3

git回购,我有新的文件增加,文件移除/重命名修改如常。当我用git diff修补另一个 视图时,我没有得到所有新的/删除的文件。然后我尝试了 --cached选项,然后,我得到了一些不同的文件集,但仍然不是所有更改+文件添加和删除的完整集合。 (我已经做了git addgit rm) 我也试过--diff-filter=ACDMRTUXB,仍然没有帮助! 我错过了其他一些选择吗?我想要的只是在1个命令中获得全套 差异。 我在我的Linux机器上有git version 1.6.2.4无法获得完整的补丁与GIT

-

TIA

回答

3

所以:

  • git diff显示履带文件(您添加在某一点上的文件,但没有添加这些具体的变化)
  • 不分级的变化
  • git diff --cached显示暂存的变更(您已经添加的)

这听起来像是在工作副本中混合了暂存和未分配的更改。如果你想要让他们都到同一个补丁,你可以:

  • unstage更改:git reset将清空从索引中的阶段性变化,但让他们在你的工作副本,所以git diff会给你完整现在打补丁
  • 阶段所有的变化:刚git add剩余的文件到您的指标:然后git diff --cached会给你完整的补丁
+0

喜的是'git的reset'安全的工作视图怎么办?在另一个选项中,你的意思是,即使只有修改,对文件执行'git add',或者从顶部目录中执行'git add'? – vyom

+0

首先,'git reset'的默认行为是重置索引(所以git忘记了已经编辑过哪些工作副本),但不会触及工作副本本身。因此,没有文件受到影响,当您运行'git status'时,它们只会再次显示为* modified *。有关详细信息,请参阅[manpage](http://www.kernel.org/pub/software/scm/git/docs/git-reset.html) – Useless

+0

@vyom - 其次,我假设您已经运行过' git add'在一些特定的文件上,否则你不会混合使用stage和unstaged编辑。在上面的第二种情况下,我建议你“git add”已编辑的特定编辑文件。我很少从顶层目录添加,因为我的工作副本中可能有临时垃圾,不应该进行版本控制。 – Useless