지점에서 어떤 파일이 변경되었는지 확인할 수있는 방법이 있습니까?
지점에서 어떤 파일이 변경되었는지 확인할 수있는 방법이 있습니까?
답변:
@Marco Ponti의 답변에 대한 대안이며 체크 아웃을 피하십시오.
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
특정 쉘이 $ () 구문을 이해하지 못하면 대신 백틱을 사용하십시오.
git diff --name-only <some-other-branch>
현재 분기와의 파일이 다른 파일이 표시됩니다 <some-other-branch>
. 그래서 본질적으로 동일한 명령,하지만 당신은 사이 다른 파일을 찾으려면이를 사용할 수있는 노트의 어떤 그들이 원격으로 관련이없는 경우에도, 두 가지를. 그 비교가 유용한 지 아닌지는 브랜치의 토폴로지에 달려 있습니다 ... 또한, <some-other-branch>
실제로 커밋 또는 태그로 해석되는 것이 될 수 있습니다.
<notMainDev>
와 <MY_CURRENT_CO_BRANCH>
공통 조상을 가지고 가장 최근에, 그리고 비교 <notMainDev>
그 조상에. 그러나 현재 브랜치 이름을 제공해야합니다 git merge-base
. 최소한 현재 버전에는 지름길이 없습니다.
git branch | grep '\*' | awk '{print $2}'
<notMainDev>와 내 현재 분기 사이의 분기 커밋을 가져옵니다. 그런 다음 git diff --name-only <notMainDev> $ (git merge-base <notMainDev> git branch | grep '\*' | awk '{print $2}'
)
다음과 같이하면됩니다 :
git checkout <notMainDev>
git diff --name-only <mainDev>
그러면 두 분기간에 다른 파일 이름 만 표시됩니다.
<mainDev>
그래도 지점이 분기 된 이후에 변경된 내용이 표시 될 것이라고 생각합니다 . git diff --name-only <sha-of-branch-point>
대신 사용 하거나 체크 아웃을 피하는 게시 된 대체 답변을 참조하십시오.
notMainDev
mainDev 커밋으로 최신 상태를 유지할 것이라고 가정했습니다 ... 보통 그 차이를 보는 것이 유용하다는 것을 알았습니다.
<sha-of-branch-point>
함께 얻을git rev-parse <branch-name>
이것은 지금까지 말하지 않은 것에 놀랐습니다!
git diff master...branch
따라서 변경 사항 만 참조하십시오. branch
현재 지점을 확인하려면
git diff master...
jqr 덕분에
이것은 짧은 손입니다
git diff $(git merge-base master branch) branch
병합베이스 (분 기간 가장 최근의 커밋)와 분기 팁
또한 마스터 대신 원본 / 마스터를 사용하면 로컬 마스터가 날짜가 지정된 경우 도움이됩니다.
git diff --name-only master..
두 분기간에 다른 파일 이름을 원할 경우
이 작업을 수행하는 방법이 너무 많다는 것을 믿을 수 없습니다. 나는 다음과 같은 주장으로 이전에 게시 한 내용을 변경했습니다.
git whatchanged --name-only --pretty="" origin..HEAD
여기에는 파일 이름과 현재 분기에서 변경된 파일 이름 만 나열됩니다.
@twalberg의 답변을 정말로 좋아했지만 항상 현재 지점 이름을 입력하고 싶지 않았습니다. 그래서 나는 이것을 사용하고있다 :
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-only
대상 분기에서 실행할 때 사용 하고 동일한 결과를 얻었습니다. 답변과 내가 제공 한 명령 사이에 좋은 점과 나쁜 점에 대한 피드백을 제공 할 수 있습니까?
git diff master.. --name-only
(3 대신 2 점 만 있음). 점의 의미를 이해하려면 이 답변을
git diff --name-only master...branch-name
우리가 비교하고 싶은
이처럼 쉬울 수 있다면 어떨까요?
git changed
메인 브랜치를 "마스터"라고하고 마스터에서 다른 브랜치를 만들려면이 별칭을 ~/.gitconfig
파일에 추가하여 쉽게 만들 수 있습니다.
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
이러한 가정은 대부분의 상황에서 대부분의 사람들에게 효과가 있지만,이를 만들고 있다는 사실을 알고 있어야합니다.
또한을 지원하는 쉘을 사용해야합니다 $()
. 쉘이 이것을 지원할 가능성이 큽니다 .
git show --stat origin/branch_name
이 분기에서 추가 또는 수정 된 파일 목록이 표시됩니다.
어떤 이유로 든 아무도 언급하지 않았습니다 git-tree
. https://stackoverflow.com/a/424142/1657819를 참조 하십시오.
git-tree
배관 명령 이기 때문에 선호됩니다 . 프로그래밍 방식이어야합니다 (아마도 더 빠름)
(기본 지점이 있다고 가정 master
)
git diff-tree --no-commit-id --name-only -r master..branch-name
그러나 이것은 브랜치에서 영향을받은 모든 파일을 보여줍니다. 명시 적으로 수정 된 파일 만 보려면 다음을 사용할 수 있습니다 --diff-filter
.
git diff-tree --no-commit-id --name-only -r master..branch-name --diff-filter=M
또한 파일 상태를 보는 --name-status
대신 사용할 수 있습니다 --name-only
( A
/ M
/ D
등).
rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
다음 배치 파일은 twalberg의 답변을 기반으로하지만 Windows에서 작동합니다.
@ECHO OFF
C: :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% origin/drop2/master)"
PAUSE
위의 내용은 메인 브랜치가 origin / master이고 Git이 설치 될 때 git bash가 포함되어 있다고 가정합니다 (그리고 그 위치는 경로 환경에 있습니다). 실제로 구성된 diff 도구 (kdiff3)를 사용하여 실제 차이점을 표시해야하므로 위의 bash 명령을 대체했습니다.
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"