Git에서 개별 파일의 변경 히스토리를 어떻게 볼 수 있습니까?
나는 다음과 같이했습니다.
git log -- [filename]
파일의 커밋 기록을 보여 주지만 각 파일 변경 내용을 어떻게 알 수 있습니까?
나는 MS에서 SourceSafe 전환을 만들려고 노력하고 단순하게하는 데 사용 해요 right-click
→ show history
.
Git에서 개별 파일의 변경 히스토리를 어떻게 볼 수 있습니까?
나는 다음과 같이했습니다.
git log -- [filename]
파일의 커밋 기록을 보여 주지만 각 파일 변경 내용을 어떻게 알 수 있습니까?
나는 MS에서 SourceSafe 전환을 만들려고 노력하고 단순하게하는 데 사용 해요 right-click
→ show history
.
답변:
이를 위해 다음을 사용합니다.
gitk [filename]
또는 이름을 변경 한 파일 이름을 따르려면
gitk --follow [filename]
당신이 사용할 수있는
git log -p filename
git이 각 로그 항목에 대한 패치를 생성하도록합니다.
보다
git help log
더 많은 옵션-실제로 많은 좋은 일을 할 수 있습니다 :) 특정 커밋에 대한 차이점을 얻으려면
git show HEAD
또는 식별자에 의한 다른 수정. 또는 사용
gitk
변경 사항을 시각적으로 찾아 볼 수 있습니다.
git log --follow -p -- path-to-file
파일 의 전체 히스토리 가 표시 됩니다 (이름 변경 이후의 히스토리 및 각 변경에 대한 차이점 포함).
다시 말해, 이름 bar
이 지정된 파일의 이름 이 한 번만 지정된 foo
경우 git log -p bar
( --follow
옵션 없이 ) 파일의 이름은 이름이 바뀐 지점까지만 파일의 기록을 표시합니다 foo
. 를 사용 git log --follow -p bar
하면 파일의 알려진 변경 사항을 포함하여 파일의 전체 기록이 표시됩니다 foo
. 이 -p
옵션을 사용하면 각 변경마다 diff가 포함됩니다.
--follow
하면 파일 이름 바꾸기 (2.) -p
를 확인할 수 있으며 파일이 어떻게 변경되는지 확인할 수 있습니다 (3.) 명령 줄 만 해당됩니다.
--
추가 된 것을 알지만 이것이 왜 이것이 최선인지 모르겠습니까? 그것이 무엇입니까?
--
옵션은 Git에게 옵션의 끝에 도달했으며 다음에 오는 것은 --
인수로 취급되어야한다고 지시 합니다. 이를 위해 git log
경로 이름이 대시로 시작하는 경우에만 차이가 있습니다 . 불행한 이름이 "--follow"인 파일의 히스토리를 알고 싶다고 가정 해보십시오.git log --follow -p -- --follow
--
수 있기 때문에 유용합니다 revision
. 실제로 무섭습니다. 예를 들어 foo
, 이름이 브랜치와 파일이 모두있는 경우 파일 git log -p foo
히스토리가 foo
아닌 git 로그 히스토리를 표시 합니다 foo
. 그러나 @DanMoulding은 --follow
명령이 하나의 파일 이름 만 인수로 사용 하므로이 파일이 인수 일 수 없으므로 덜 필요합니다 revision
. 방금 배웠습니다. 아마도 당신은 그것을 당신의 대답에서 벗어나는 것이 옳았을 것입니다; 잘 모르겠습니다.
텍스트 기반을 유지하려면 tig 를 사용하십시오 .
빠른 설치:
# apt-get install tig
$ brew install tig
단일 파일에서 히스토리를 보려면 다음을 사용하십시오. tig [filename]
또는 자세한 리포지토리 히스토리를 찾아보십시오.tig
gitk
텍스트 기반과 유사합니다 . 터미널에서 색상을 지원합니다!
tig -- path/to/specific/file
git whatchanged -p filename
git log -p filename
이 경우 에도 마찬가지입니다.
파일 내부의 특정 코드 줄이로 변경된시기도 확인할 수 있습니다 git blame filename
. 파일의 모든 줄에 대해 짧은 커밋 ID, 작성자, 타임 스탬프 및 전체 코드 줄이 인쇄됩니다. 버그를 발견 한 후 버그가 발생한 시점 (또는 결함이 누구인지)을 알고 자 할 때 매우 유용합니다.
filename
command에서 선택 사항은 아닙니다 git blame filename
.
SourceTree를 사용하여 리포지토리를 시각화하는 경우 (무료이며 상당히 좋음) 파일을 마우스 오른쪽 단추로 클릭하고 선택한 로그를 선택할 수 있습니다.
디스플레이 (아래)는 gitk 및 대부분의 다른 옵션보다 훨씬 친숙합니다. 불행히도 (현재) 커맨드 라인에서이 뷰를 쉽게 시작할 수있는 방법은 없습니다 – 현재 SourceTree의 CLI는 repos를 엽니 다.
다른 답변을 읽고 조금만 연주 한 후의 다른 답변 요약 :
일반적인 명령 줄 명령은
git log --follow --all -p dir/file.c
그러나 gitk (gui) 또는 tig (text-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
.
--all
모든 지점에 대해, 나머지는 댄의 답변 @에 설명되어있다
이 별칭을 .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 출력과 거의 동일하게 보입니다. 즐겨.
git lg -p filename
-검색 된 파일의 아름다운 diff를 반환합니다.
최근에 나는 tig
그것이 매우 유용하다는 것을 발견 하고 발견했다. A 또는 B를 원하지만 대부분의 경우 깔끔한 경우가 있습니다.
귀하의 경우, tig <filename>
당신이 찾고있는 것일 수 있습니다.
이 정확한 목적으로 git-playback 을 썼습니다.
pip install git-playback
git playback [filename]
이렇게하면 결과를 명령 줄 (예 git log -p
:)에 표시하는 동시에 화살표 키 (예 :)를 사용하여 각 커밋을 단계별로 진행할 수 있습니다 gitk
.
당신이 파일의 전체 역사를보고 싶다면 포함 에 다른 모든 지점 사용
gitk --all <filename>
파일의 특정 부분을 변경 한 커밋을 나열하는 이것을 시도 할 수도 있습니다 (Git 1.8.4에서 구현 됨).
반환 된 결과는이 특정 부분을 수정 한 커밋 목록입니다. 사령부 :
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
여기서 upperLimit는 start_line_number이고 lowerLimit은 파일의 ending_line_number입니다.
자세한 내용은 https://www.techpurohit.com/list-some-useful-git-commands
뛰어난 Git Extensions 를 사용하면 파일이 여전히 존재하는 기록의 한 지점으로 이동하고 (삭제 된 경우 그렇지 않으면 HEAD로 이동) File tree
탭으로 전환 하고 파일을 마우스 오른쪽 버튼으로 클릭하고을 선택하십시오 File history
.
기본적으로 파일 이름 변경을 통해 파일을 따르며 Blame
탭을 사용하면 지정된 개정판에서 이름을 볼 수 있습니다.
삭제 개정을 클릭 할 때 탭에 표시 fatal: Not a valid object name
되는 것과 같은 사소한 문제가 View
있지만 그와 함께 살 수 있습니다. :-)
TortoiseGit을 사용하는 경우 파일을 마우스 오른쪽 버튼으로 클릭하고 수행 할 수 TortoiseGit --> Show Log
있습니다. 팝업 창에서 다음을 확인하십시오.
' Show Whole Project
'옵션이 선택되지 않았습니다.
' All Branches
'옵션이 선택되었습니다.
git diff -U <filename>
당신에게 통일 된 diff를 제공하십시오.
빨간색과 초록색으로 표시되어야합니다. 그렇지 않은 경우 git config color.ui auto
먼저 실행하십시오 .
나는이 날 사용하게 할 뭔가 간단한 찾고, 시작했을 때 영업 이익이 어디에 있는지에 대해 아마 해요 자식 difftool 와 vimdiff 특정 커밋을부터 내의 repo에서 파일을 검토 변화. 나는 내가 찾은 답변에 너무 만족하지 않았 으므로이 git inc remental rep orter (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
인수없이 호출하면 리포지토리 기록의 시작 부분부터 시작합니다. 그렇지 않으면 제공하는 약식 커밋 해시로 시작하여 현재로 진행합니다. 언제든지 Ctrl-C를 눌러 종료 할 수 있습니다. 첫 번째 이후의 인수는 차이 보고서에 해당 인수 사이에 나열된 파일 만 포함하도록 제한합니다 (OP가 원했던 것으로 생각하고 작은 프로젝트를 제외한 모든 프로젝트에 권장합니다). 특정 파일의 변경 사항을 확인하는 경우 와 처음부터 시작하려면, 당신은 ARG1에 대해 빈 문자열을 제공해야합니다. vim 사용자가 아닌 경우 vimdiff 를 자주 사용하는 diff 도구로 바꿀 수 있습니다 .
동작은 관련 변경 사항이 발견되면 커밋 주석을 출력하고 변경된 각 파일에 대해 vimdiff 실행 제공을 시작하는 것입니다 ( git difftool 동작이지만 여기서 작동합니다).
이 접근 방식은 아마도 순진하지만, 여기 및 관련 게시물에서 많은 솔루션을 살펴보면 관리자 액세스 권한이없는 시스템에 자체 학습 곡선이있는 인터페이스로 새로운 도구를 설치하는 것과 관련이 있습니다. 위의 스크립트는 내가 다루지 않고 원하는 것을했습니다. 좀 더 정교한 무언가가 필요할 때 여기에 많은 훌륭한 제안을 살펴볼 것입니다. 그러나 이것이 OP에 직접 반응한다고 생각합니다.