Question

I'm always asking myself a set of questions about branches i've created that i've yet to determine how to accomplish:

  1. What files did i change in branch?
  2. What are the actually changes (diff) i made to the branch?
  3. What is the log of commits that i made to the branch?

Now i think if figured out how to get the hashes of all the commits that were committed to the branch but not merged into master using git cherry master <branchname>. With this i could go hash by hash and figure out everything but if you have a lot of commits this could be time consuming. Notice i'm not wanting to compare to current state of master. I think the key is knowing the hash of master that you created your branch off of but i'm not exactly sure how to determine this.

Was it helpful?

Solution

To find where your current checkout diverged from the master branch,

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

to find out what files have been changed since then,

git diff --name-only $base HEAD

to show the accumulated difference

git diff $base HEAD

When you want to describe an entire series of commits you can use the syntax in the answer Gabriele Petronella linked above, master..HEAD is shorthand for HEAD ^master which means "all commits reachable from HEAD, but not including commits reachable from master". Missing endpoints default to HEAD, so you can say git log --oneline master..

OTHER TIPS

Assuming you branched from master,

1. What files have changed since branching?

git diff master...<branchname> --name-only

2. What is the full diff since branching?

git diff master...<branchname>

3. What is the commit log since branching?

git log master..<branchname>

You do not need to specify <branchname> if you have it checked out (e.g., git diff master...).

Note: git diff requires triple dot ... and git log requires double dot .. to get the behavior that you are asking for.


For explanations on dot syntax, see:

For the list of files changed and the actual diff, it makes more sense if you know 2 commits between which you wanna compare.

If you want to see the diff between START_SHA1 and END_SHA1, you could do:

git diff START_SHA1 END_SHA1

If you want just the list of files, you could do:

git diff --name-only START_SHA1 END_SHA1

If you also want to know what type of change went into the file (like A, M, D, C, R, U), you could do:

git diff --name-status START_SHA1 END_SHA1
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top