Вопрос: Показывать, какие файлы изменились между двумя версиями


Я хочу объединить две ветви, которые были разделены на некоторое время и хотели узнать, какие файлы были изменены.

Перешел по этой ссылке: http://linux.yyz.us/git-howto.html что было весьма полезно.

Инструменты для сравнения отраслей, с которыми я столкнулся, - это:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

Интересно, есть ли что-то вроде «git status master..branch», чтобы видеть только те файлы, которые отличаются между двумя ветвями.

Не создавая новый инструмент, я думаю, что это самое близкое, что вы можете сделать сейчас (что, конечно же, будет показывать повторы, если файл был изменен более одного раза):

  • git diff master..branch | grep "^diff"

Интересно, есть ли что-то, что я пропустил ...


1764


источник


Ответы:


Чтобы сравнить текущую ветку с master

$ git diff --name-status master

Чтобы сравнить любую пару ветвей

$ git diff --name-status firstbranch..yourBranchName

Это должно делать то, что вам нужно, если я правильно вас понимаю.


2151



Пытаться

$ git diff --stat --color master..branchName

Это даст вам больше информации о каждом изменении, в то же время используя то же количество строк.

Вы также можете перевернуть ветки, чтобы получить более четкое представление о различии, если бы вы слились в другую сторону:

$ git diff --stat --color branchName..master

351



Также имейте в виду, что git имеет дешевое и легкое ветвление. Если я думаю, что слияние может быть проблематичным, я создаю ветвь для слияния. Так что если masterимеет изменения, которые я хочу объединить, и baэто моя ветка, которая нуждается в коде от мастера, я могу сделать следующее:

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

Конечным результатом является то, что я должен попробовать слиться в откидной ветке, прежде чем вкручивать свою ветку. Если я соберусь самостоятельно, я могу просто удалить ba-mergeветви и начала.


143



Если кто-то пытается создать файл diff из двух ветвей:

git diff master..otherbranch > myDiffFile.diff

40



Обратите внимание, что git упрощает просто попытку слияния и обратно от любых проблем, если вам не нравится результат. Это может быть проще, чем поиск потенциальных проблем заранее.


30



There is also a GUI based method.

You can use gitk.

  1. Run:

    $ gitk --all
    
  2. Right click on a commit of a branch and select Mark this commit in the pop-up menu.

  3. 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.


29



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.


26



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.


12



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.


9



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

9



Just additional info to JasonSmith's answer:

I checked out my branch with this command:

$ git clone -b branchName http://repository_url

However, suggested git diff command was failing:

$ git diff --name-status master..branchName
fatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

I investigated branches following this thread:

$ git branch
* branchName
$ git branch -a
* branchName
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/branchName

I didn't have branch master locally, so I performed the comparison against remotes/origin/master instead:

$ git diff --name-status remotes/origin/master..push
. . .
. . .
. . .

More info on remotes/origin/master in this thread.


4



There are two branches lets say

  • A (Branch on which you are working)
  • B (Another branch with which you want to compare)

Being in branch A you can type

git diff --color B

then this will give you a output of

enter image description here

The important point about this is

  1. Text in green is inside present in Branch A

  2. Text in red is present in Branch B


3