git diff last commit加上所有未提交的更改?

时间:2015-01-15 18:10:15

标签: git github

我正在制作一个回购广告,我有一些未提交的更改。

$ git status
<my local changes>

我还有一个以前正在进行的工作&#34;承诺有很多差异,由同事提出。

$ git log
commit 6b388883f3e3cf2a864aeb335ce36e10f0e7a60d
Date:   Thu Jan 15 12:39:26 2015 +0000

    Work in progress

commit 91c868cda56e309b9a417f21c929a1beb1cc74d4
Date:   Thu Jan 14 12:39:26 2015 +0000

    <Last "real" commit to master>

我现在计划创建一个基于大师(又名91c868cda56e309b9a417f21c929a1beb1cc74d4)的新分支,并制作一套全新的结构化提交,以制作一个干净的公关。

要做到这一点,输出单个差异将非常有帮助,所有更改(提交和未提交)自上次&#34;真实&#34;提交,91c868cda56e309b9a417f21c929a1beb1cc74d4

这是一个一次性的分支,所以我在这个分支上的工作并不重要。

最好的方法是什么?

我有一个想法是我可以提交所有本地更改,然后在该提交和91c868cda56e309b9a417f21c929a1beb1cc74d4之间进行区分:是否可以看到这两个提交之间所有更改的单个差异?

1 个答案:

答案 0 :(得分:2)

使用git diff,您必须选择两组文件进行比较。您可以通过明确指定两个修订来完成此操作,例如git diff HEAD~3 HEAD^,这两个修订区分这两个提交。或者,您可以使用工作树或索引/暂存区域进行一些提交;或者将您的索引/临时区域与工作树进行比较。

要针对当前工作树区分一次提交,请命名一个提交:git diff HEADgit diff HEAD^git diff HEAD~2,依此类推。但是,如果您没有为特定提交命名,git diff会将您的索引/暂存区域与工作树进行比较,而不是使用HEAD提交。

要对索引/暂存区域进行一次提交,请命名一次提交,并使用--cachedgit diff --cached HEAD~2,依此类推。名称​​否提交,git默认使用此处HEAD

如果您命名两个提交,git diff会比较这两个提交。您可以将它们编写为单独的提交,例如git diff HEAD~2 HEAD,或者您可以使用..格式:git diff HEAD~2..HEAD。这里--cached没有任何意义,因为它意味着“使用索引而不是工作目录”而diff不使用work-dir。

在您的特定情况下,将HEAD^(名称提交91c868cda56e309b9a417f21c929a1beb1cc74d4)与您的工作树进行比较是您现在想要的。但是,如果您执行现在进行新提交,则将HEAD^^(或显式提交91c868cda56e309b9a417f21c929a1beb1cc74d4)与您的新提交进行比较将是您想要的。您的新提交将是新的HEAD,因此您可以在此时区分HEAD^^HEAD

有关拼写特定修订版的多种方法,请参阅the gitrevisions documentation


请注意,非diff标记的其他参数(diff标记为-w以忽略空格的内容)被视为路径说明符,以限制diffed文件集。例如,如果您只是好奇两个版本之间path/to/file.txt发生了什么:

git diff rev1 rev2 path/to/file.txt

如果文件名“看起来像”一个diff标志(例如,如果你想看看名为--cached的文件发生了什么?)你可以使用--来分隔“控制差异本身“从”路径名称意味着限制哪些路径被扩散“。