git 差异最后一次提交加上所有未提交的更改?
git diff last commit plus all uncommitted changes?
我正在 brach 上进行回购,我有一些未提交的更改。
$ git status
<my local changes>
我也有一个以前的 "work in progress" 提交,其中有很多差异,由同事提交。
$ 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>
我现在计划创建一个基于 master 的新分支(又名 91c868cda56e309b9a417f21c929a1beb1cc74d4
),并进行一组全新的整洁的结构化提交,以进行干净的 PR。
要做到这一点,输出单个差异非常有帮助,其中包含自上次 "real" 提交以来所做的所有更改(已提交和未提交),91c868cda56e309b9a417f21c929a1beb1cc74d4
.
这是一个一次性分支,所以我在这个分支上做什么并不重要。
最好的方法是什么?
我的一个想法是我可以提交我所有的本地更改,然后在该提交和 91c868cda56e309b9a417f21c929a1beb1cc74d4
之间进行比较:是否可以看到这两个提交之间所有更改的单个差异?
使用 git diff
您必须 select 两组文件进行比较。您可以通过显式指定两个修订来做到这一点,例如 git diff HEAD~3 HEAD^
,这会区分这两个提交。或者,您可以将一些提交与您的工作树或 index/staging-area 进行比较;或将您的 index/staging-area 与您的工作树进行比较。
要将一项提交与您当前的工作树区分开来,命名一项提交:git diff HEAD
、git diff HEAD^
、git diff HEAD~2
,依此类推。但是,如果您没有命名特定的提交,git diff
会将您的 index/staging 区域与您的工作树进行比较,而不是使用 HEAD
提交。
要将一项提交与您的 index/staging 区域进行比较,命名一项提交并使用 --cached
: git diff --cached HEAD~2
,依此类推。 Name no commits and git defaults to using HEAD
here.
如果您命名 两个 提交,git diff
将比较这两个提交。您可以将它们都写为单独的提交,例如 git diff HEAD~2 HEAD
,或者您可以使用 ..
格式:git diff HEAD~2..HEAD
。这里 --cached
没有意义,因为它意味着 "use index instead of work-directory" 并且 diff 没有使用工作目录。
在您的特定情况下,比较 HEAD^
,名称提交 91c868cda56e309b9a417f21c929a1beb1cc74d4
与您的工作树是您现在想要的。但是,如果您 do 现在进行新提交,则将 HEAD^^
(或显式提交 91c868cda56e309b9a417f21c929a1beb1cc74d4
)与您的新提交进行比较将是您想要的。您的新提交将是新的 HEAD
,因此您可以在那时区分 HEAD^^
与 HEAD
。
有关拼写特定修订的多种方法,请参阅 the gitrevisions
documentation。
请注意,不是差异标志的其他参数(差异标志类似于 -w
以忽略白色 space)被视为路径说明符,以限制差异文件集。例如,如果您只是好奇 path/to/file.txt
在两次修订之间发生了什么:
git diff rev1 rev2 path/to/file.txt
如果一个文件名 "looks like" 一个差异标志(例如,如果你想查看名为 --cached
的文件发生了什么?)你可以使用 --
来分隔 "arguments meant to control the diff itself" 来自 "path names meant to limit which paths are diffed".
我正在 brach 上进行回购,我有一些未提交的更改。
$ git status
<my local changes>
我也有一个以前的 "work in progress" 提交,其中有很多差异,由同事提交。
$ 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>
我现在计划创建一个基于 master 的新分支(又名 91c868cda56e309b9a417f21c929a1beb1cc74d4
),并进行一组全新的整洁的结构化提交,以进行干净的 PR。
要做到这一点,输出单个差异非常有帮助,其中包含自上次 "real" 提交以来所做的所有更改(已提交和未提交),91c868cda56e309b9a417f21c929a1beb1cc74d4
.
这是一个一次性分支,所以我在这个分支上做什么并不重要。
最好的方法是什么?
我的一个想法是我可以提交我所有的本地更改,然后在该提交和 91c868cda56e309b9a417f21c929a1beb1cc74d4
之间进行比较:是否可以看到这两个提交之间所有更改的单个差异?
使用 git diff
您必须 select 两组文件进行比较。您可以通过显式指定两个修订来做到这一点,例如 git diff HEAD~3 HEAD^
,这会区分这两个提交。或者,您可以将一些提交与您的工作树或 index/staging-area 进行比较;或将您的 index/staging-area 与您的工作树进行比较。
要将一项提交与您当前的工作树区分开来,命名一项提交:git diff HEAD
、git diff HEAD^
、git diff HEAD~2
,依此类推。但是,如果您没有命名特定的提交,git diff
会将您的 index/staging 区域与您的工作树进行比较,而不是使用 HEAD
提交。
要将一项提交与您的 index/staging 区域进行比较,命名一项提交并使用 --cached
: git diff --cached HEAD~2
,依此类推。 Name no commits and git defaults to using HEAD
here.
如果您命名 两个 提交,git diff
将比较这两个提交。您可以将它们都写为单独的提交,例如 git diff HEAD~2 HEAD
,或者您可以使用 ..
格式:git diff HEAD~2..HEAD
。这里 --cached
没有意义,因为它意味着 "use index instead of work-directory" 并且 diff 没有使用工作目录。
在您的特定情况下,比较 HEAD^
,名称提交 91c868cda56e309b9a417f21c929a1beb1cc74d4
与您的工作树是您现在想要的。但是,如果您 do 现在进行新提交,则将 HEAD^^
(或显式提交 91c868cda56e309b9a417f21c929a1beb1cc74d4
)与您的新提交进行比较将是您想要的。您的新提交将是新的 HEAD
,因此您可以在那时区分 HEAD^^
与 HEAD
。
有关拼写特定修订的多种方法,请参阅 the gitrevisions
documentation。
请注意,不是差异标志的其他参数(差异标志类似于 -w
以忽略白色 space)被视为路径说明符,以限制差异文件集。例如,如果您只是好奇 path/to/file.txt
在两次修订之间发生了什么:
git diff rev1 rev2 path/to/file.txt
如果一个文件名 "looks like" 一个差异标志(例如,如果你想查看名为 --cached
的文件发生了什么?)你可以使用 --
来分隔 "arguments meant to control the diff itself" 来自 "path names meant to limit which paths are diffed".