How to compare two git branches
Compare two branches using git diff
In order to compare two branches easily, you have to use the “git diff” command and provide the branch names separated by dots.
git diff branch1..branch2
Using this command, Git will compare the tip of both branches (also called the HEAD) and display a “diff” recap that you can use to see modifications. In short, it will show you all the commits that “branch2” has that are not in “branch1”.
Let’s say for example that you are looking to see the differences between a feature branch (being one commit ahead of master) and the master branch. In order to see what has been modified between master and feature, you would run the following command.
git diff master..feature diff --git a/file-feature b/file-feature new file mode 100644 index 0000000..add9a1c --- /dev/null +++ b/file-feature @@ -0,0 +1 @@ +this is a feature file
Compare specific file between two branches
In some cases, you may want to see all changes done to a specific file on the current branch you are working on. In order to see the differences done to a file between two branches, use the “git diff” command, specify the two branches and the filename.
git diff master..feature -- <file>
Let’s say for example that the file that you modified between those two branches is called “README”.
In order to see the differences done to this file, you would run the following command
$ git diff master..feature -- README # git diff master..origin/fix/feature -- README diff --git a/README b/README new file mode 100644 index 0000000..add9a1c --- /dev/null +++ b/README @@ -0,0 +1 @@ +this is the README file
git diff of encrypted files
vi ~/.gitconfig [diff "gpg"] textconv = gpg --no-tty -q --decrypt
vi /<repo>/.gitattributes *.gpg filter=gpg diff=gpg *.asc filter=gpg diff=gpg
Ansible vault diff in Git
Normally, when you diff an Ansible vault, all you see is gibberish.
With Git, there’s an easy way to associate a textconv with files, so you can run the vaults through ansible-vault view prior to diffing.
Setup your textconv for vault files in either ~/.gitconfig (globally) or ./.git/config (per-project).
vi ~/.gitconfig [diff "ansible-vault"] textconv = ansible-vault view cachetextconv = true
Then, either in ~/.config/git/attributes (globally) or in ./.gitattributes (per-project), configure your vault files to use the ansible-vault type.
# or *.vault.yml, or *-vault.yml, or whatever convention you use for vaults vault.yml diff=ansible-vault
Now, git diff has a lot less gibberish.