【问题标题】:git diff --staged on moved file?git diff --staged 移动文件?
【发布时间】:2012-11-13 23:35:18
【问题描述】:

这个问题与下面的问题相同: How to do a git diff on moved/renamed file? 但有一个重要的区别是我想查看上一次提交中的文件版本和当前暂存的版本之间的变化。

git diff --staged 显示在一侧被删除的整个文件:

--- a/old_path/main.cpp
+++ /dev/null
@@ -0,0 +1,42 @@
- line 1
- line 2
- line 3
- etc.

并将整个文件添加到另一个文件中:

--- /dev/null
+++ b/new_path/main.cpp
@@ -0,0 +1,42 @@
+ line 1
+ line 2
+ line 2.5
+ line 3
+ etc.

没有任何方便的方法来比较两者之间的实际差异。

【问题讨论】:

    标签: git git-diff mv


    【解决方案1】:

    如果您查看过去的提交,答案会有些不同,但使用git diff --staged 表明您正在寻找HEAD 中的old_path/main.cpp 与您当前上演的new_path/main.cpp 之间的区别,即源自旧文件。在这种情况下,假设 new_path/main.cpp 自上演以来没有任何新更改,则此命令应该可以工作:

    git diff HEAD:old_path/main.cpp new_path/main.cpp
    

    在new_path/main.cpp 还包含尚未暂存的其他更改的情况下,不确定如何准确指定第二个路径的索引中的版本...

    编辑:在gitrevisions(7) 稍作阅读后,这似乎应该处理后一种情况:

    git diff HEAD:old_path/main.cpp :new_path/main.cpp
    

    注意: 没有修订前缀,它应该指定索引中的版本。

    【讨论】:

    • +1,谢谢。我想要第二个,它适用于我的目的(new_path/main.cpp 包含分阶段和非分阶段的更改)。第一个给出了 git diff --staged 已经给出的内容。
    • man gitrevisions 提到“阶段编号(0 到 3)”,但似乎没有定义数字对应的内容...... man git-stage/git-add 似乎也对这个主题保持沉默.有什么想法吗?
    • 嗯...也许您需要更新版本的git 手册页...我的(v1.7.12.3)在:<n>:<path> 的gitrevisions(7) 标题下说: “缺少的阶段编号......命名阶段 0 条目。在合并期间,阶段 1 是共同祖先,阶段 2 是目标分支的版本......,阶段 3 是正在合并的分支的版本。 "
    【解决方案2】:

    由于我不知道上述问题的答案,我通常使用迂回的方式:只要方便,尤其是每当我记得时,我都会在单独的提交中进行文件移动更改。因此,一旦提交了移动,我就可以继续处理文件,并且可以以“正常”方式执行正常的 git diff --staged ,为下一次提交做准备。这是我所知道的最简单的方法...问题是,有时我会忘记这样做...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 2013-03-02
      • 2011-08-09
      • 2012-02-07
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多