我正在制作一个回购广告,我有一些未提交的更改。
$ 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
之间进行区分:是否可以看到这两个提交之间所有更改的单个差异?
答案 0 :(得分:2)
使用git diff
,您必须选择两组文件进行比较。您可以通过明确指定两个修订来完成此操作,例如git diff HEAD~3 HEAD^
,这两个修订区分这两个提交。或者,您可以使用工作树或索引/暂存区域进行一些提交;或者将您的索引/临时区域与工作树进行比较。
要针对当前工作树区分一次提交,请命名一个提交:git diff HEAD
,git diff HEAD^
,git diff HEAD~2
,依此类推。但是,如果您没有为特定提交命名,git diff
会将您的索引/暂存区域与工作树进行比较,而不是使用HEAD
提交。
要对索引/暂存区域进行一次提交,请命名一次提交,并使用--cached
:git 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
的文件发生了什么?)你可以使用--
来分隔“控制差异本身“从”路径名称意味着限制哪些路径被扩散“。