with - list files in git diff
Showing which files have changed between two revisions (10)
I want to merge two branches that have been separated for a while and wanted to know which files have been modified.
Came across this link: http://linux.yyz.us/git-howto.html which was quite useful.
The tools to compare branches I've come across are:
git diff master..branch
git log master..branch
git shortlog master..branch
Was wondering if there's something like "git status master..branch" to only see those files that are different between the two branches.
Without creating a new tool, I think this is the closest you can get to do that now (which of course will show repeats if a file was modified more than once):
git diff master..branch | grep "^diff"
Was wondering if there's something I missed...
Also keep in mind that git has cheap and easy branching. If I think a merge could be problematic I create a branch for the merge. So if
master has the changes I want to merge in and
ba is my branch that needs the code from master I might do the following:
git checkout ba git checkout -b ba-merge git merge master .... review new code and fix conflicts.... git commit git checkout ba git merge ba-merge git branch -d ba-merge git merge master
End result is that I got to try out the merge on a throw-away branch before screwing with my branch. If I get my self tangled up I can just delete the
ba-merge branch and start over.
And if you are looking for changes only among certain file(s), then:
git diff branch1 branch2 -- myfile1.js myfile2.js
branch1 is optional and your current branch (the branch you are on) will be considered by default if branch1 is not provided. e.g:
git diff master -- controller/index.js
If you are using IntelliJ IDEA, you can also compare any branch with your current working branch. See http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827 for more info. This is available in the free edition as well.
If you like GUI and are using Windows, here is an easy way.
- Download WinMerge
- Check out the two branches into different folders
- Do a folder by folder compare using WinMerge. You can also easily make modifications if one of the branches is the one you are working on.
One more option, using meld in this case:
git difftool -d master otherbranch
This allows not only to see the differences between files, but also provides a easy way to point and click into a specific file.
There are plenty of answers here, but I wanted to add something that I commonly use. IF you are in one of the branches that you would like to compare I typically do one of the following. For the sake of this answer we will say that we are in our secondary branch. Depending on what view you need at the time will depend on which you choose, but most of the time I'm using the second option of the two. The first option may be handy if you are trying to revert back to an original copy -- either way, both get the job done!
This will compare master to the branch that we are in (which is secondary) and the original code will be the added lines and the new code will be considered the removed lines
git diff ..master
This will also compare master to the branch that we are in (which is secondary) and the original code will be the old lines and the new code will be the new lines
git diff master..
There is also a GUI based method.
You can use gitk.
$ gitk --all
Right click on a commit of a branch and select Mark this commit in the pop-up menu.
- Right click on a commit of another branch and select Diff this -> marked commit or Diff marked commit -> this.
Then there will be a changed files list in the right bottom panel and diff details in the left bottom panel.
To compare the current branch against
$ git diff --name-status master
To compare any pair of branches
$ git diff --name-status firstbranch..yourBranchName
That should do what you need, if I understand you correctly.
When working collaboratively, or on multiple features at once, it's common that the upstream or even your master contains work that is not included in your branch, and will incorrectly appear in basic diffs.
If your Upstream may have moved, you should do this:
git fetch git diff origin/master...
Just using git diff master can include, or fail to include, relevant changes.
You can also easily compare branches for changed files using for example TortoiseGit. Just click on Browse References and pick the branches you want to compare.
For example if you compare your branch with master you will get as a result list of files that will be changed in master if you decide to merge your-branch into master.
Remmber that you will have different result if you compare master with your-branch and your-branch with master.