itsource

Git 버전 관리를 사용하여 파일 변경 내역 보기

mycopycode 2023. 5. 12. 22:17
반응형

Git 버전 관리를 사용하여 파일 변경 내역 보기

변경된 내용에 대한 전체 세부 정보를 포함하여 개별 파일의 기록을 보려면 어떻게 합니까?

git log -- [filename]에는 파일의 커밋 기록이 표시되지만 변경된 파일 내용은 어떻게 표시됩니까?

이를 통해 Git는 각 로그 항목에 대한 패치를 생성할 수 있습니다.

git log -p -- filename

자세한 옵션은 를 참조하십시오. 실제로는 많은 유용한 기능을 수행할 수 있습니다.:)


특정 커밋에 대한 차이만 가져오려면 다음을 사용합니다.

git show HEAD

또는 식별자로 다른 수정사항을 지정합니다.


시각적으로 변경 내용 찾아보기

gitk

그래픽 보기의 경우 다음을 사용합니다.

gitk [filename]

파일 이름을 변경할 때 파일을 추적하는 방법

gitk --follow [filename]
git log --follow -p -- path-to-file

이렇게 하면 파일의 전체 기록(이름 변경 및 각 변경에 대한 차이가 있는 기록 포함)이 표시됩니다.

즉, 파일 이름이 다음과 같은 경우bar한때 이름이 붙었습니다.foo,그리고나서git log -p bar((으)로 안 함--followoption합니다. 이 "은"로 때 파일 이름이 알려진 시점에는 파일의 기록을 표시하지 않습니다.foo.사용.git log --follow -p bar내역을 합니다. 이 " 파의전기표시다니합"로 때 도 표시됩니다. 파일이 다음과 같이 알려졌을 때 파일에 대한 변경 사항도 표시됩니다.foo.-p옵션을 사용하면 각 변경 사항에 대해 diff가 포함됩니다.

tig 는 GUI 기반과 유사한 색상을 지원하는 터미널 기반 뷰어입니다.

빠른 설치:

  • APT:apt-get install tig
  • 홈브루(OS X):$ brew install tig

볼 때 합니다: 단일파기보이려명사용합다니령을면록.tig [filename]

다음을 통해 합니다.tig

git whatchanged -p filename 또한 이 경우와 동일합니다.

또한 파일 내부의 특정 코드 행이 로 변경된 시기를 확인할 수 있습니다.이렇게 하면 파일의 모든 줄에 대한 간단한 커밋 ID, 작성자, 타임스탬프 및 전체 코드 줄이 인쇄됩니다.이것은 버그를 발견한 후에 매우 유용하며 언제 버그가 도입되었는지(또는 누구의 잘못인지) 알고자 합니다.

원본 트리 사용자

원본 트리를 사용하여 리포지토리를 시각화하는 경우(자유롭고 양호함) 파일을 마우스 오른쪽 버튼으로 클릭하고 선택 항목 로그를 선택할 수 있습니다.

여기에 이미지 설명 입력

디스플레이(아래)는 gitk 및 나열된 다른 대부분의 옵션보다 훨씬 더 친숙합니다.그러나 현재로서는 명령줄에서 이 보기를 쉽게 실행할 수 있는 방법이 없습니다. 소스 트리의 CLI는 현재 리포지토리를 엽니다.

여기에 이미지 설명 입력

파일의 각 줄을 마지막으로 수정한 수정본 및 작성자를 표시하는 방법

git blame filename

또는 강력한 비난 GUI를 사용하려는 경우:

git gui blame filename

다른 답변을 읽고 약간 재생한 후의 요약:

일반적인 명령줄 명령은 다음과 같습니다.

git log --follow --all -p dir/file.c

그러나 gitk(GUI) 또는 tig(텍스트 UI)를 사용하여 훨씬 더 많은 사람이 읽을 수 있는 시각을 제공할 수도 있습니다.

gitk --follow --all -p dir/file.c

tig --follow --all -p dir/file.c

Debian/Ubuntu에서 이러한 사랑스러운 도구에 대한 설치 명령은 예상대로입니다.

sudo apt-get install gitk tig

현재 사용 중인 항목:

alias gdf='gitk --follow --all -p'

그냥 타이핑할 수 있도록.gdf dir하위 디렉터리에 있는 모든 것에 대한 집중적인 기록을 얻는 것dir.

GitLens와 함께 Visual Studio Code를 사용할 수 있습니다.이것은 매우 강력한 도구입니다.

GitLens를 설치한 후 GitLens 탭으로 이동하여 다음을 선택합니다.FILE HISTORY검색할 수 있습니다.

여기에 이미지 설명 입력

이 별칭을 .gitconfig에 추가합니다.

[alias]
    lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative

다음과 같은 명령을 사용합니다.

> git lg
> git lg -- filename

출력은 gitk 출력과 거의 동일하게 보입니다.즐거운 시간 되세요.

에 저는 최에발것은한견근을 발견했습니다.tig그리고 그것이 매우 유용하다는 것을 알았습니다.A나 B가 되었으면 하는 경우도 있지만 대부분 깔끔합니다.

의 경우에는, 당의경우는에신,.tig <filename>당신이 찾고 있는 것일 수도 있습니다.

https://jonas.github.io/tig/

또한 Git 1.8.4에서 구현된 파일의 특정 부분을 변경한 커밋을 나열하는 이 작업을 시도할 수 있습니다.

반환되는 결과는 이 특정 부분을 수정한 커밋 목록입니다.명령:

git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>

여기서 upperLimit은 시작 줄 번호이고 lowerLimit은 파일의 끝 줄 번호입니다.

자세한 내용은 http://techpurohit.in/list-some-useful-git-commands 을 참조하십시오.

소스 트리 UI에서 오른쪽 클릭 상황에 맞는 메뉴에서 '선택 항목 기록' 옵션을 선택하여 파일 기록을 찾을 수 있습니다.

여기에 이미지 설명 입력

모든 커밋의 기록이 표시됩니다.

나는 이 정확한 목적을 위해 Git-Playback을 썼습니다.

pip install git-playback
git playback [filename]

명령행에되는 이점이 예: " 이게하명예수있표다니습할시결를과에").git log -p 화살표 하여 각 을 단계별로 할 수 (예: " 화표키사를예수수단있행할습다니로으적계각커을밋여하용").gitk).

또는:

gitx -- <path/to/filename>

gitx를 사용하는 경우

다른 모든 분기를 포함하여 파일의 전체 기록을 보려면 다음을 사용합니다.

gitk --all <filename>

Git GUI를 사용하는 경우(Windows의 경우):

▁ 아래에서Repository메뉴, 사용할 수 있습니다.Visualize master's History.

위쪽 창에서 커밋을 강조 표시하고 오른쪽 아래에 파일을 강조 표시하면 왼쪽 아래에 해당 커밋에 대한 디프가 표시됩니다.

우수한 Git Extensions를 사용하면 파일이 여전히 존재했던 기록의 한 지점으로 이동합니다(삭제된 경우에는 HEAD로 이동).File tree탭에서 파일을 마우스 오른쪽 단추로 클릭하고 선택합니다.File history.

때까지 , 파일 이름은 " " 기적으변이경다합니름을파일고변하경"입니다.Blame탭을 사용하면 지정된 리비전에서 이름을 볼 수 있습니다.

보여주는 것과 같은 약간의 사소한 것들이 있습니다.fatal: Not a valid object name에 시대에View개정을 할 때 저는 살 수 :-) 제삭수정클만지클, 하그살로다있니습으. :-)

SmartGit:

  1. 메뉴에서 변경되지 않은 파일을 표시할 수 있습니다.변경되지 않은 파일 보기/표시
  2. 파일을 마우스 오른쪽 버튼으로 클릭하고 'Log(로그)'를 선택하거나 'Ctrl-L'을 누릅니다.

제가 찾던 답은 여기에 없었습니다.커밋을 위해 준비한 파일의 변경 사항을 확인하기 위해서였습니다.예.,

git diff --cached

한다면, 하고 ToroughGit를 할 수 입니다.TortoiseGit --> Show Log팝업 창에서 다음을 확인합니다.

  • 'Show Whole Project옵션을 선택하지 않았습니다.

  • 'All Branches옵션이 선택되어 있습니다.

특정 파일에 대한 모든 커밋을 가져오려면 다음 명령을 사용합니다.

git rev-list HEAD --oneline FileName


예를들면

git rev-list HEAD --oneline index.html

산출량

7a2bb2f update_index_with_alias
6c03e56 update_changes
e867142 Revert "add_paragraph"

파일의 변경 내용을 보려는 경우

git log -p fileName

gif특정 파일에 대한 git 커밋 이미지 참조

git diff -U <filename>통일된 차이를 제공합니다.

그것은 빨간색과 초록색으로 칠해야 합니다.그렇지 않은 경우 실행:git config color.ui auto

은 다음과 .meld

어떤 커밋이 파일을 변경했는지 확인하고 싶다면 다음 작업을 수행합니다.git difftool(여기서 설명하는 처럼) 변경사항을 그래픽으로 확인하려면 대신 다음 작업을 수행합니다.

git log --follow --oneline -- path/to/file.c

샘플 실행 및 출력:

eRCaGuy_hello_world$ git log --follow --oneline -- c/alsa_aplay__play_tone_sound_WIP.c
04b67fb (HEAD -> master) Update c/alsa_aplay__play_tone_sound_WIP.c
301122a wip: alsa_aplay__play_tone_sound.c: finish initial version of program
d4e8092 wip: add c/alsa_aplay__play_tone_sound.c

이제 마지막 변경 사항을 그래픽으로 볼 수 있습니다(위의 출력에서 커밋 해시 풀링).

파일 이름이 변경되었기 때문에 파일을 자동으로 추적할 수 있도록 파일 이름을 의도적으로 생략합니다. 어쨌든 이러한 커밋은 이 파일만 편집했을 가능성이 높습니다.

# just the last change
git difftool 04b67fb~..04b67fb

# and the one before that
git difftool 301122a~..301122a

# ...and before that
git difftool d4e8092~..d4e8092

파일 이름을 지정해야 하는 경우 다음과 같이 지정합니다.

git difftool 04b67fb~..04b67fb -- path/to/file.c

만약 당신이 Git 플러그인과 함께 Eclipse를 사용하고 있다면, 그것은 역사와의 훌륭한 비교 뷰를 가지고 있습니다.파일을 마우스 오른쪽 버튼으로 클릭하고 "비교 대상" → "기록"을 선택합니다.

저는 아마도 이것이 시작되었을 때 OP가 어디에 있었는지에 대해 알고 있을 것입니다. vimdiff함께 gitdiff 도구를 사용하여 특정 커밋에서 시작하는 제 보고서의 파일 변경을 검토할 수 있는 간단한 것을 찾고 있습니다.저는 제가 발견한 답변에 만족하지 못했기 때문에 이 Git 증분 리포터(gitincrep) 스크립트를 함께 작성했고 저에게 유용했습니다.

#!/usr/bin/env bash

STARTWITH="${1:-}"
shift 1

DFILES=( "$@" )

RunDiff()
{
        GIT1=$1
        GIT2=$2
        shift 2

        if [ "$(git diff $GIT1 $GIT2 "$@")" ]
        then
                git log ${GIT1}..${GIT2}
                git difftool --tool=vimdiff $GIT1 $GIT2 "$@"
        fi
}

OLDVERS=""
RUNDIFF=""

for NEWVERS in $(git log --format=format:%h  --reverse)
do
        if [ "$RUNDIFF" ]
        then
                RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
        elif [ "$OLDVERS" ]
        then
                if [ "$NEWVERS" = "${STARTWITH:=${NEWVERS}}" ]
                then
                        RUNDIFF=true
                        RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
                fi
        fi
        OLDVERS=$NEWVERS
done

인수 없이 호출되며, 이는 repo 기록의 처음부터 시작됩니다. 그렇지 않으면 제공한 단축 커밋 해시로 시작하여 현재로 진행됩니다. 종료하려면 언제든지 ctrl-C를 사용할 수 있습니다.첫 번째 이후의 모든 인수는 차이 보고서를 해당 인수 중에 나열된 파일만 포함하도록 제한합니다(OP가 원했던 것이며 작은 프로젝트를 제외한 모든 프로젝트에 권장합니다).특정 파일의 변경 내용을 확인하고 처음부터 시작하려면 arg1에 빈 문자열을 제공해야 합니다.vim 사용자가 아니라면 vimdiff를 가장 좋아하는 diff 도구로 대체할 수 있습니다.

동작은 관련 변경 사항이 발견되면 커밋 주석을 출력하고 변경된 각 파일에 대해 vimdiff 실행을 제공하기 시작하는 것입니다(이것은 도구 동작이 약간 다르지만 여기서 작동합니다).

이 접근 방식은 매우 순진한 것일 수도 있지만, 여기와 관련 게시물에서 많은 솔루션을 살펴보니, 관리자 권한이 없는 시스템에 자체 학습 곡선이 있는 인터페이스를 사용하여 새로운 도구를 설치하는 것이 포함되어 있었습니다.위의 스크립트는 그 어떤 것도 다루지 않고 제가 원하는 것을 했습니다.저는 더 정교한 것이 필요할 때 여기서 많은 훌륭한 제안을 조사할 것입니다 - 하지만 저는 이것이 OP에 직접적으로 반응한다고 생각합니다.

언급URL : https://stackoverflow.com/questions/278192/view-the-change-history-of-a-file-using-git-versioning

반응형