카테고리 보관물: Git

Git

준비된 변경 사항을 어떻게 표시합니까? 나는 몇

나는 몇 가지 변화를 저질렀다. 다음 커밋을 위해 준비된 모든 파일의 차이점을 어떻게 알 수 있습니까? git status에 대해 알고 있지만 준비된 파일 이름뿐만 아니라 실제 diff를보고 싶습니다.

나는 것을보고 자식-DIFF (1) 매뉴얼 페이지를 말한다

자식 차이 [-옵션] [-] […]

이 양식은 인덱스 (다음 커밋의 스테이징 영역)와 관련하여 변경 한 내용을 확인하기위한 것입니다. 즉, 차이점은 인덱스에 추가하도록 git에 지시 할 있지만 여전히 그렇지 않습니다. git-add (1)을 사용하여 이러한 변경 사항을 준비 할 수 있습니다.

불행히도, 나는 이것을 이해할 수 없다. 별명을 만들 수있는 편리한 하나의 라이너가 있어야합니다.



답변

그냥 있어야합니다 :

git diff --cached

--cached의미는 현재에 대한 캐시 / 인덱스의 변경 (즉, 단계적 변경)을 나타 HEAD냅니다. --staged의 동의어입니다 --cached.

--staged--cached가리 키지 않고 HEAD단지에 대한 차이 만 HEAD있습니다. git add --patch(또는 git add -p)를 사용하여 커밋 할 것을 선택하면 --staged준비된 내용을 반환합니다.


답변

간단한 그래픽은 이것을 명확하게합니다.

자식 차이

작업 디렉토리와 색인 사이의 변경 사항을 표시합니다. 변경된 사항을 표시하지만 커밋을 위해 준비되지 않았습니다.

자식 diff-캐시

인덱스와 HEAD (이 분기의 마지막 커밋) 사이의 변경 사항을 표시합니다. 이것은 인덱스에 추가되어 커밋을 위해 준비된 것을 보여줍니다.

git diff HEAD

작업 디렉토리와 HEAD (색인의 변경 사항 포함) 사이의 모든 변경 사항을 표시합니다. 커밋을 위해 준비되었는지 여부에 관계없이 마지막 커밋 이후의 모든 변경 사항이 표시됩니다.

또한 :

365Git 에 대한 자세한 내용이 있습니다.


답변

시각적으로 나란히보기에 관심이 있다면 확산 시각적 차이 도구를 사용하면됩니다. 모든 변경 사항이 준비되지 않은 경우에도 세 개의 창이 표시됩니다. 충돌이 발생하면 네 개의 창이 있습니다.

로 불러

diffuse -m

Git 작업 카피에.

당신이 저에게 묻는다면, 10 년 동안 내가 본 최고의 시각적 차이가 있습니다. 또한 Git에만 국한되지는 않습니다 : SVN, Mercurial, Bazaar 등 다양한 VCS와 상호 운용됩니다 …

참조 : git diff에서 단계별 트리와 작업 트리를 모두 표시 하시겠습니까?


답변

참고 git status -v 또한 (가) 변화를 개최 보여줍니다! ( git add단계적 변경 이 필요하다는 것을 의미합니다 .-일부 변경 사항. 단계적 변경 사항, 차이점이 없습니다 git status -v. 2006 년 2 월 Git 1.2.0
이후로 수행 됩니다 . )

긴 형식 (기본값) git status에는 문서화되지 않은 “verbose”옵션이 있으며 실제로 HEAD와 인덱스 사이의 차이를 표시합니다.

그리고 더 완전 해 지려고합니다 : ” git diff에 단계별 및 작업 트리 표시? “(git 2.3.4+, 2015 년 2 분기) :

git status -v -v

답변

이 명령을 사용할 수 있습니다.

git diff --cached --name-only

--cached의 옵션 git diff수단이 파일을 개최하려면 및 --name-only옵션 수단은 파일의 이름을 얻을 수 있습니다.


답변

버전 1.7 이상에서는 다음과 같아야합니다.

git diff --staged

답변

VISUAL DIFF 도구 사용

기본 답변 (명령 줄에서)

여기에 가장 적합한 답변은 캐시 된 / 단계적 변경 사항을 보는 방법을 올바르게 보여줍니다 Index.

$ git diff --cached

또는 $ git diff --staged별칭입니다.

대신 시각적 차이 도구 시작

기본 응답은 git bash (예 : 명령 줄 또는 콘솔)에서 diff 변경 사항을 뱉어냅니다. 단계별 파일 차이의 시각적 표현을 선호하는 사람들을 위해, git 내에 사용 가능한 스크립트가 있습니다 difftool.

$ git difftool --staged

문제는이 같은 작업을 수행합니다 git diff --staged언제든지 제외은 diff 도구를 실행 (즉 때마다 파일이 DIFF에 의해 처리된다),이 (내 환경에서 이것이 기본 시각은 diff 도구를 시작합니다 kdiff3 ).

도구가 시작된 후 git diff 스크립트는 시각적 diff 도구가 닫힐 때까지 일시 중지됩니다. 따라서 다음 파일을 보려면 각 파일을 닫아야합니다.

git 명령 difftool대신 항상 사용할 수 있습니다diff

모든 시각적 차이 요구 git difftool에 대해 git diff모든 옵션을 포함한 모든 명령 대신 작동 합니다.

예를 들어, 각 파일마다 수행 할 것인지 묻지 않고 시각적 차이 도구를 시작하려면 -y옵션을 추가하십시오 (보통 당신이 원할 것이라고 생각합니다 !!) :

$ git difftool -y --staged

이 경우 시각적 차이 도구에서 각 파일을 한 번에 하나씩 끌어 올려서 도구를 닫은 후 다음 파일을 불러옵니다.

또는 다음에서 준비된 특정 파일의 차이점을 살펴보십시오 Index.

$ git difftool -y --staged <<relative path/filename>>

모든 옵션에 대해서는 매뉴얼 페이지를 참조하십시오.

$ git difftool --help

Visual Git Tool 설정

기본값 이외의 시각적 자식 도구를 사용하려면 다음 -t <tool>옵션을 사용하십시오 .

$ git difftool -t <tool> <<other args>>

또는 다른 기본 시각적 차이 도구를 사용하도록 git을 구성하는 방법은 difftool 매뉴얼 페이지를 참조하십시오.

.gitconfigdiff / merge 도구로 vscode에 대한 예제 항목

difftool 설정의 일부는 .gitconfig파일을 장면 뒤에서 변경하거나 직접 편집하는 git 명령을 통해 파일을 변경하는 것입니다.

.gitconfig홈 디렉토리 (예 : ~Unix 또는 c:\users\<username>Windows의 경우) 에서 찾을 수 있습니다 .

또는을 사용 .gitconfig하여 기본 Git 편집기에서 사용자 를 열 수 있습니다 git config -e --global.

다음은 .gitconfigVS 코드에 대한 글로벌 사용자의 diff 도구 및 병합 도구의 예제 항목입니다 .

[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