질문자 :Frerich Raabe
커밋할 몇 가지 변경 사항을 준비했습니다. 다음 커밋을 위해 준비된 모든 파일의 diff를 어떻게 볼 수 있습니까? 나는 git status 를 알고 있지만 준비된 파일 이름뿐만 아니라 실제 diff를보고 싶습니다.
나는 git-diff(1) 매뉴얼 페이지가 말하는 것을 보았다.
자식 diff [--옵션] [--] […]
이 양식은 인덱스(다음 커밋을 위한 스테이징 영역)와 관련된 변경 사항을 보기 위한 것입니다. 즉, 차이점은 인덱스에 추가로 추가하도록 git에 지시 할 수 있지만 아직 수행하지 않은 것입니다. git-add(1)를 사용하여 이러한 변경 사항을 준비할 수 있습니다.
불행히도, 나는 이것을 잘 이해할 수 없습니다. 별칭을 만들 수 있는 편리한 원 라이너가 있어야 합니다. 맞죠?
다음과 같아야 합니다.
git diff --cached
--cached
HEAD
에 대한 캐시/인덱스의 변경 사항(즉, 단계적 변경 사항)을 표시함을 의미합니다. --staged
--cached
의 동의어입니다.
--staged
및 --cached
가리 키지 않는 HEAD
에 대한 단지 차이 HEAD
. git add --patch
(또는 git add -p
)를 사용하여 커밋할 항목을 선택하면 --staged
는 스테이징된 항목을 반환합니다.
CB Bailey간단한 그래픽은 이것을 더 명확하게 합니다.
자식 차이
작업 디렉토리와 인덱스 간의 변경 사항을 표시합니다. 이것은 변경된 사항을 보여주지만 커밋을 위해 준비되지는 않습니다.
자식 diff --캐시
인덱스와 HEAD(이 분기의 마지막 커밋) 간의 변경 사항을 표시합니다. 이것은 인덱스에 추가되고 커밋을 위해 준비된 항목을 보여줍니다.
자식 diff HEAD
작업 디렉토리와 HEAD(색인의 변경 사항 포함) 간의 모든 변경 사항을 표시합니다. 이것은 커밋을 위해 준비되었는지 여부에 관계없이 마지막 커밋 이후의 모든 변경 사항을 보여줍니다.
또한 :
365Git에 대한 자세한 내용이 있습니다.
Community Wikigit status -v
는 단계적 변경 사항도 표시합니다! (즉, 단계적 -- git add
-- 일부 변경 사항이 필요합니다. 단계적 변경 사항이 없으며 git status -v
와 차이점이 없습니다.
2006년 2월 Git 1.2.0 이후로 수행)
긴 형식(기본값)에서 git status
에는 HEAD와 인덱스 간의 차이점을 실제로 표시하는 문서화되지 않은 "verbose" 옵션이 있습니다.
그리고 그것은 훨씬 더 완벽해질 것입니다: " Show both staged & working tree in git diff? " (git 2.3.4+, Q2 2015):
git status -v -v
VonC시각적인 나란히 보기에 관심이 있는 경우 확산 시각적 비교 도구가 이를 수행할 수 있습니다. 모든 변경 사항이 아닌 일부 변경 사항이 준비된 경우에도 세 개의 창을 표시합니다. 충돌이 있는 경우 4개의 창이 있습니다.
로 호출
diffuse -m
Git 작업 복사본에서.
당신이 나에게 묻는다면, 내가 본 최고의 비주얼은 10 년 동안 본 것입니다. 또한 Git에만 국한되지 않습니다. SVN, Mercurial, Bazaar 등을 비롯한 수많은 다른 VCS와 상호 운용됩니다.
참조: git diff에 준비된 트리와 작업 트리를 모두 표시하시겠습니까?
krlmlr스테이징 영역 대 리포지토리(마지막 커밋) 비교 사용
$git diff --staged
이 명령은 단계적( $ git add fileName
) 변경 사항을 마지막 커밋과 비교합니다. 다음 커밋에 들어갈 스테이징을 보고 싶다면 git diff --staged를 사용할 수 있습니다. 이 명령은 단계적 변경 사항을 마지막 커밋과 비교합니다.
작업 대 스테이징 비교 사용
$ git diff
이 명령은 작업 디렉토리에 있는 항목을 스테이징 영역에 있는 항목과 비교합니다. git diff 자체는 마지막 커밋 이후에 이루어진 모든 변경 사항을 표시하지 않으며 아직 준비되지 않은 변경 사항만 표시한다는 점에 유의하는 것이 중요합니다. 모든 변경 사항을 준비했다면( $ git add fileName
) git diff는 출력을 제공하지 않습니다.
또한 파일을 스테이징( $ git add fileName
)한 다음 편집하면 git diff를 사용하여 스테이징된 파일의 변경 사항과 스테이징되지 않은 변경 사항을 볼 수 있습니다.
Goyal Vicky이 명령을 사용할 수 있습니다.
git diff --cached --name-only
git diff
의 --cached
옵션은 준비된 파일을 가져오는 것을 의미하고 --name-only
옵션은 파일의 이름만 가져오는 것을 의미합니다.
Yash Patadia시각적 차이 도구 사용
기본 답변(명령줄에서)
Index
에서 캐시된/단계적 변경 사항을 보는 방법을 올바르게 보여줍니다.
$ git diff --cached
또는 $ git diff --staged
는 별칭입니다.
대신 Visual Diff 도구 실행하기
기본 대답은 git bash(즉, 명령줄 또는 콘솔)에서 diff 변경 사항을 뱉어냅니다. difftool
이라는 명령줄에 표시하지 않고 표시된 각 파일에 대해 시각적 diff 도구를 시작하는 스크립트를 git 내에서 사용할 수 있습니다.
$ git difftool --staged
이것은 diff 도구가 실행될 때마다(즉, 파일이 diff에 의해 처리될 때마다) git diff --staged
와 동일한 작업을 수행하고 기본 시각적 diff 도구를 시작합니다(내 환경에서는 kdiff3 ). .
도구가 시작된 후 시각적 diff 도구가 닫힐 때까지 git diff 스크립트가 일시 중지됩니다. 따라서 다음 파일을 보려면 각 파일을 닫아야 합니다.
git 명령에서 diff
대신 difftool
을 사용할 수 있습니다.
모든 시각적 diff 요구 사항에 대해 git difftool
은 모든 옵션을 포함하여 모든 git diff
명령 대신 작동합니다.
예를 들어, 각 파일에 대해 수행할지 여부를 묻지 않고 Visual diff 도구를 시작하려면 -y
옵션을 추가하십시오(일반적으로 이것을 원할 것이라고 생각합니다!!):
$ git difftool -y --staged
이 경우 Visual diff 도구의 각 파일을 한 번에 하나씩 가져와 도구가 닫힌 후 다음 파일을 표시합니다.
Index
준비된 특정 파일의 diff를 보려면 다음을 수행하십시오.
$ git difftool -y --staged <<relative path/filename>>
모든 옵션에 대해서는 매뉴얼 페이지를 참조하십시오.
$ git difftool --help
Visual Git 도구 설정
기본값 이외의 시각적 git 도구를 사용하려면 -t <tool>
옵션을 사용합니다.
$ git difftool -t <tool> <<other args>>
또는 다른 기본 시각적 diff 도구를 사용하도록 git을 구성하는 방법은 difftool 매뉴얼 페이지를 참조하십시오.
diff/merge 도구로 vscode에 대한 .gitconfig
항목의 예
difftool 설정의 일부는 .gitconfig
파일을 뒤에서 변경하는 git 명령을 통해 변경하거나 직접 편집하는 작업을 포함합니다.
.gitconfig
는 Unix의 경우 ~
또는 일반적으로 Windows의 경우 c:\users\<username>
과 같이 홈 디렉토리에서 찾을 수 있습니다.
git config -e --global
사용하여 기본 Git 편집기에서 .gitconfig
사용자를 열 수 있습니다.
다음은 diff 도구 및 병합 도구로 사용되는 VS Code용 .gitconfig
예제 항목입니다.
[diff] tool = vscode guitool = vscode [merge] tool = vscode guitool = vscode [mergetool] prompt = true [difftool "vscode"] cmd = code --wait --diff \"$LOCAL\" \"$REMOTE\" path = c:/apps/vscode/code.exe [mergetool "vscode"] cmd = code --wait \"$MERGED\" path = c:/apps/vscode/code.exe
LightCC버전 1.7 이상에서는 다음과 같아야 합니다.
git diff --staged
ML13원격 repo 분기를 대상으로 하려는 의도가 있고 커밋 변경 로그의 첫 번째 패스가 불완전한 경우 이렇게 푸시하기 전에 커밋 문을 수정할 수 있습니다.
장소 상에서
... 약간의 변경 ...
git diff # look at unstaged changes git commit -am"partial description of changes"
... 커밋에서 언급되지 않은 더 많은 변경 사항을 리콜 ...
git diff origin/master # 단계적이지만 푸시되지 않은 변경 사항을 봅니다.
... 단계적 커밋 문 수정 ...
git commit --amend -m"i missed mentioning these changes ...." git push
Marc Condon단계적 변경이 있는 파일이 두 개 이상인 경우 git add -i
를 사용한 다음 6: diff
를 선택하고 마지막으로 관심 있는 파일을 선택하는 것이 더 실용적일 수 있습니다.
Fred Schoen기본적으로 git diff 는 git 업데이트 파일 목록에 추가되지 않은 변경 사항을 표시하는 데 사용됩니다. 그러나 추가되거나 stagged된 변경 사항을 표시하려면 stagged 또는 추가된 파일 diff에 관심이 있음을 git에 알리는 추가 옵션을 제공해야 합니다.
$ git diff # Default Use $ git diff --cached # Can be used to show difference after adding the files $ git diff --staged # Same as 'git diff --cached' mostly used with latest version of git
예시
$ git diff diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644 --- a/x/y/z.js +++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) { - if (a) + if (typeof a !== 'undefined') res = 1; else res = 2; $ git add x/y/z.js $ git diff $
파일을 추가하면 기본값인 'git diff'를 사용할 수 없습니다. 다음과 같이 해야 합니다.
$ git diff --cached diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644 --- a/x/y/z.js +++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) { - if (a) + if (typeof a !== 'undefined') res = 1; else res = 2;
Deepak Dixitgit gui
및 git-cola
는 인덱스를 보고 조작할 수 있는 그래픽 유틸리티입니다. 둘 다 준비된 파일에 대한 간단한 시각적 비교를 포함하며 git-cola
는 더 정교한 병렬 시각적 비교 도구를 실행할 수도 있습니다.
git의 인덱스에서 파일을 제거하는 방법 에서 내 밀접하게 관련된 답변을 참조하십시오. 그리고 이 공식 Git-GUI 클라이언트 카탈로그도 있습니다.
Brent Bradburngitk
도구에 대해서도 생각하고 변경 사항을 확인하는 데 매우 유용합니다.
sam--cached
는 나를 위해 작동하지 않았습니다. ... git log
git diff origin/<branch>..<branch>
.
ergohack이것을 쉽게 해주는 또 다른 도구는 Emacs의 Magit 모드입니다. 기본 보기에는 단계적 변경 사항과 단계적 변경 사항이 모두 나열됩니다. 편집기 명령으로 덩어리(또는 한 줄의 코드)를 쉽게 스테이징하거나 언스테이징할 수 있기 때문에 스테로이드에서 git add -p
와 같은 역할을 합니다. 표준 git porcelain을 아는 것이 중요하지만 git diff --cached
거의 사용하지 않습니다.
https://magit.vc/
remcycles출처 : http:www.stackoverflow.com/questions/1587846/how-do-i-show-the-changes-which-have-been-staged