git - 自创建分支以来的更改?

24

我一直在问自己一组关于我创建的分支的问题,但我还没有确定如何完成:

  1. 我在分支中更改了哪些文件?
  2. 我对该分支做出了哪些实际更改(差异)?
  3. 我对该分支进行的提交日志是什么?

现在我想我已经找到了如何获取所有提交到分支但未合并到主分支的提交哈希的方法,使用 git cherry master <branchname>。有了这个,我可以逐个哈希值找出每一个提交的细节,但如果有很多提交,这可能会耗费时间。请注意,我不想与当前的主分支状态进行比较。我认为关键是知道您从哪个主分支哈希创建了您的分支,但我不确定如何确定。


2
https://dev59.com/i2445IYBdhLWcg3w5OEH - Gabriele Petronella
@GabrielePetronella 谢谢,至少回答了第三个问题。 - coding4fun
3个回答

35

要找出您当前的检出分支与主分支分歧的位置,

base=`git merge-base master HEAD`
echo $base

查找自那时以来已更改的文件,

git diff --name-only $base HEAD

显示累积差异

git diff $base HEAD
当您想要描述一个完整的提交系列时,可以使用Gabriele Petronella在上面链接中提到的语法,master..HEADHEAD ^master的简写,它的意思是“所有从HEAD可达的提交,但不包括从master可达的提交”。如果端点缺失,则默认为HEAD,因此您可以使用git log --oneline master..

非常感谢。我对Git比较新,所以不知道“merge-base”命令。这个回答完美地解决了我的问题。 - coding4fun
1
谢谢! 如果你正在使用像Beyond Compare这样的外部比较工具,那么请将最后一行更改为git difftool $base HEAD --dir。这在审查他人分支的代码时非常有用。 - styfle

16
假设您从主分支master创建了一个新分支,
1. 自创建分支以来哪些文件发生了变化?
git diff master...<branchname> --name-only

2. 自分支以来的完整差异是什么?

git diff master...<branchname>

3.自分支以来的提交日志是什么?

git log master..<branchname>

如果您已经检出了分支(例如,git diff master...),则不需要指定<branchname>

注意: git diff需要三个点... ,而git log需要两个点..才能获得您所要求的行为。


关于点语法的解释,请参见:


1
当我想查看修改的文件列表时,我更喜欢使用git diff master... --stat - anishpatel

2

如果你想查看文件更改列表和实际差异,那么你需要知道两个提交之间的差异。

如果你想查看START_SHA1END_SHA1之间的差异,你可以执行以下操作:

git diff START_SHA1 END_SHA1

如果您只想要文件列表,可以这样做:
git diff --name-only START_SHA1 END_SHA1

如果你想知道文件中发生了哪种类型的更改(例如 A, M, D, C, R, U),可以这样做:
git diff --name-status START_SHA1 END_SHA1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接