code

git 분기에서 수정된 모든 파일 가져오기

starcafe 2023. 6. 2. 20:40
반응형

git 분기에서 수정된 모든 파일 가져오기

분기에서 변경된 파일을 확인할 수 있는 방법이 있습니까?

@Marco Ponti의 답변에 대한 대안으로, 체크아웃을 피합니다.

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

특정 셸이 $() 구조를 이해하지 못하면 백택스를 대신 사용합니다.

다음 사항만 수행하면 됩니다.

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

이렇게 하면 두 분기 간에 서로 다른 파일 이름만 표시됩니다.

이것이 지금까지 언급되지 않은 것에 놀랐습니다!

git diff main...branch

따서변 표시만용내경에서만 하세요.branch

현재 분기 사용을 확인하려면

git diff main...

jqr 덕분에

이것은 에 대한 간략한마디로

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

따라서 병합 기준(분기 간 가장 최근의 공통 커밋)과 분기 팁

한사용을 합니다.origin/main가 지정된 .

이렇게 많은 방법이 있다는 것이 믿기지 않습니다.저는 이전에 누군가가 게시한 것처럼 변경된 내용을 다음과 같은 주장과 함께 사용합니다.

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

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

저는 @twalberg의 답변이 정말 마음에 들었지만 항상 현재 지점 이름을 입력해야 하는 것은 싫었습니다.그래서 저는 이것을 사용합니다.

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

2020년 11월 업데이트:

현재 분기에서 수정된(그리고 커밋된!) 파일 목록을 가져오려면 표준 를 사용하여 최단 콘솔 명령을 사용할 수 있습니다.

git diff --name-only master...


  • 로컬 "마스터" 분기가 오래된 경우(리모트 뒤) 원격 이름을 추가합니다("원본"이라고 가정).

    git diff --name-only origin/master...

  • 커밋되지 않은 변경사항도 포함하려면 다음을 제거합니다....:

    git diff --name-only master

  • 다른 주 분기 이름(예: "main")을 사용하는 경우 대체:

    git diff --name-only main...

  • stdout(복사 가능하도록)으로 출력하려면:

    git diff --name-only master... | cat

  • 이 명령을 실행하는 폴더에 상관없이 VSode 터미널에서 파일 이름을 클릭할 수 있도록 하려면 다음을 추가합니다.--relative:

    git diff --name-only --relative master... | cat


다양한 옵션에 대한 정말 멋진 상세한 설명 https://blog.jpalardy.com/posts/git-how-to-find-modified-files-on-a-branch/

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

우리가 비교하고 싶은 것.

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-treehttps://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기타)

git show --stat origin/branch_name

이렇게 하면 이 분기에 추가되거나 수정된 파일 목록이 표시됩니다.

기능 분기에 있고 마스터와 비교하여 어떤 파일이 변경되었는지 확인하려는 경우...바로 이것:

git diff --name-only master

받아들여진 답은 -git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)매우 가깝지만 삭제 상태가 잘못되었다는 것을 알게 되었습니다.분기에 파일을 추가했는데 이 명령어는--name-status)는 제가 삭제한 파일에 "A" 상태를 주고, 제가 추가한 파일에 "D" 상태를 주었습니다.

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

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

는 grep를 사용하기 때문에 파일 경로인 diff --git 행만 받습니다.

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

어때

git diff --name-only HEAD~1

@twalberg 및 @iconoclast의 기능을 확장하여 cmd를 사용하는 경우 다음을 사용할 수 있습니다.

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

위에서는 기본 브랜치가 오리진/마스터이며 Git가 설치될 때 Gitbash가 포함되었다고 가정합니다(그리고 Gitbash의 위치는 경로 환경에 있습니다).실제로 구성된 diff 도구(kdiff3)를 사용하여 실제 차이를 보여줘야 했기 때문에 위의 bash 명령을 대체했습니다.

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

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

반응형