Programing

자식 분기에서 수정 된 모든 파일을 가져옵니다

crosscheck 2020. 5. 24. 12:52
반응형

자식 분기에서 수정 된 모든 파일을 가져옵니다


지점에서 어떤 파일이 변경되었는지 확인할 수있는 방법이 있습니까?


@Marco Ponti의 답변에 대한 대안이며 체크 아웃을 피하십시오.

git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)

특정 쉘이 $ () 구문을 이해하지 못하면 대신 백틱을 사용하십시오.


다음과 같이하면됩니다 :

git checkout <notMainDev>
git diff --name-only <mainDev>

그러면 두 분기간에 다른 파일 이름 만 표시됩니다.


이것은 지금까지 말하지 않은 것에 놀랐습니다!

git diff master...branch

따라서 변경 사항 만 참조하십시오. branch

현재 지점을 확인하려면

git diff master...

jqr 덕분에

이것은 짧은 손입니다

git diff $(git merge-base master branch) branch

병합베이스 (분 기간 가장 최근의 커밋)와 분기 팁

또한 마스터 대신 원본 / 마스터를 사용하면 로컬 마스터가 날짜가 지정된 경우 도움이됩니다.


이 작업을 수행하는 방법이 너무 많다는 것을 믿을 수 없습니다. 나는 다음과 같은 주장으로 이전에 게시 한 내용을 변경했습니다.

git whatchanged --name-only --pretty="" origin..HEAD

여기에는 파일 이름과 현재 분기에서 변경된 파일 이름 만 나열됩니다.


나는 @twalberg의 답변을 정말로 좋아했지만 항상 현재 지점 이름을 입력하고 싶지 않았습니다. 그래서 나는 이것을 사용하고있다 :

git diff --name-only $(git merge-base master HEAD)

git whatchanged 좋은 대안으로 보인다.


이처럼 쉬울 수 있다면 어떨까요?

git changed

메인 브랜치를 "마스터"라고하고 마스터에서 다른 브랜치를 만들려면이 별칭을 ~/.gitconfig파일에 추가하여 쉽게 만들 수 있습니다.

cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"

이러한 가정은 대부분의 상황에서 대부분의 사람들에게 효과가 있지만,이를 만들고 있다는 사실을 알고 있어야합니다.

또한을 지원하는 쉘을 사용해야합니다 $(). 쉘이 이것을 지원할 가능성이 큽니다 .


git diff --name-only master...branch-name

우리가 비교하고 싶은


git show --stat origin/branch_name

이 분기에서 추가 또는 수정 된 파일 목록이 표시됩니다.


허용 된 답변-- git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)은 매우 가깝지만 삭제 상태가 잘못되었음을 알았습니다 . 지점에 파일을 추가했지만이 명령 ()을 사용 --name-status하여 파일에 "A"상태를 삭제하고 파일에 "D"상태를 추가했습니다.

대신이 명령을 사용해야했습니다.

git diff --name-only $(git merge-base <notMainDev> <mainDev>)

어떤 이유로 든 cmd를 사용하는 경우 @twalberg 및 @iconoclast의 기능을 확장하면 다음을 사용할 수 있습니다.

FOR /F "usebackq" %x IN (`"git branch | grep '*' | cut -f2 -d' '"`) DO FOR /F "usebackq" %y IN (`"git merge-base %x master"`) DO git diff --name-only %x %y

다음 배치 파일은 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

The above assumes that the main branch is origin/master and that git bash was included when Git was installed (and its location is in the path environment). I actually needed to show the actual differences using a configured diff tool (kdiff3) so substituted the following bash command above:

bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"

I use grep so I only get the lines with diff --git which are the files path:

git diff branchA branchB | grep 'diff --git'
// OUTPUTS ALL FILES WITH CHANGES, SIMPLE HA :)
diff --git a/package-lock.json b/package-lock.json

참고URL : https://stackoverflow.com/questions/10641361/get-all-files-that-have-been-modified-in-git-branch

반응형