programing

git blottom으로 이전 커밋을 보려면 어떻게 해야 합니까?

i4 2023. 5. 1. 19:57
반응형

git blottom으로 이전 커밋을 보려면 어떻게 해야 합니까?

보고된 커밋 전에 누가 특정 을 편집했는지 확인할 수 있습니까?git blame특정 라인에 대한 커밋 기록처럼?

예를 들어, 다음을 실행합니다(Supervisor에서).uncrustify프로젝트):

$ git blame -L10,+1 src/options.cpp
^fe25b6d (Ben Gardner 2009-10-17 13:13:55 -0500 10) #include "prototypes.h"

커밋하기 전에 해당 을 편집한 사용자를 확인하려면 어떻게 해야 합니까?fe25b6d그리고 그 커밋 에 누가 그것을 편집했습니까?

git blame -L 10,+1 fe25b6d^ -- src/options.cpp

인 (기값대신본볼책) 할 수 .HEAD);fe25b6d^는 의부니다입의 입니다.fe25b6d.


편집: Git 2.23의 새로운 기능은--ignore-rev에 옵션 git blame:

git blame --ignore-rev fe25b6d

커밋 을 제공하는 (이은커의스 OP문질답않하다것사입니지용할만는지것에밋제택는공을하▁use'▁while의ll다you를 사용할 것입니다).git log다른 답변에 따라), 다른 라인을 잘못 탓하지 않을 수 있으므로 이 솔루션의 더 나은 방법입니다.

Git log -L을 사용하여 선 범위의 진화를 볼 수 있습니다.

예:

git log -L 15,23:filename.txt

는 "filename.txt라는 파일에서 15~23행의 진화를 보여준다"를 의미합니다.

앰버의 대답은 정확하지만, 저는 그것이 불분명하다는 것을 알았습니다.구문은 다음과 같습니다.

git blame {commit_id} -- {path/to/file}

고: 더--트리 형식의 sha1을 상대 파일 경로에서 분리하는 데 사용됩니다.1

예:

git blame master -- index.html

모든 것을 알게 된 앰버에게 전적으로 감사드립니다! :)

체크아웃할 수 있습니다.

git gui blame <filename>

이전 커밋으로 이동하기 위해 "git bloss"와 같은 변경 사항을 그래픽으로 표시하지만 한 줄당 클릭 가능한 링크를 사용할 수 있습니다.커밋 세부 정보가 포함된 팝업을 표시하려면 링크 위에 마우스를 놓습니다.제 학점이 아니라...여기서 찾았습니다.

http://zsoltfabok.com/blog/2012/02/git-blame-line-history/

git guiGit에 대한 그래픽 Tcl/Tc 인터페이스입니다.다른 매개 변수 없이 파일, 헝크 또는 심지어 한 줄을 커밋하기 위해 매우 간단하지만 유용한 그래픽 앱을 시작합니다. 수정, 되돌리기, 푸시...와 같은 다른 유사한 명령도 실행됩니다.그것은 Git Stock 스위트의 일부입니다.윈도우즈에서는 설치 관리자에 포함됩니다.Ondebian - 다른 *nix 시스템에 대해서는 모릅니다 - 별도로 설치해야 합니다.

apt-get install git-gui

문서에서:

https://git-scm.com/docs/git-gui

묘사

Git.gitgui에 대한 Tcl/TK 기반 그래픽 사용자 인터페이스는 사용자가 새 커밋을 만들고, 기존 커밋을 수정하고, 분기를 만들고, 로컬 병합을 수행하고, 원격 저장소로 가져오기/푸시하여 저장소를 변경할 수 있도록 하는 데 중점을 둡니다.

gitk와 달리 gitgui는 커밋 생성 및 단일 파일 주석에 중점을 두고 프로젝트 기록을 표시하지 않습니다.그러나 git gui 내에서 gitk 세션을 시작하기 위한 메뉴 작업을 제공합니다.

gitgui는 모든 일반적인 UNIX 시스템, Mac OS X 및 Windows(Cygwin 및 MSYS 모두에서)에서 작동하는 것으로 알려져 있습니다.가능한 범위 내에서 OS별 사용자 인터페이스 지침을 따르므로 gitgui는 사용자를 위한 상당히 기본적인 인터페이스입니다.

명령

을 탓하다

지정된 버전의 지정된 파일(또는 지정되지 않은 경우 작업 디렉터리)에서 책임 뷰어를 시작합니다.

브라우저

지정된 커밋의 모든 파일을 표시하는 트리 브라우저를 시작합니다.브라우저를 통해 선택한 파일이 책임 뷰어에서 열립니다.

시티쿨

git gui를 시작하고 종료하고 셸로 돌아가기 전에 정확히 한 번 커밋하도록 준비합니다.인터페이스는 커밋 작업으로만 제한되어 응용 프로그램의 시작 시간을 약간 줄이고 메뉴 모음을 단순화합니다.

버전

git gui의 현재 실행 중인 버전을 표시합니다.

은 이문에대매독해같다다습니음과은결책특한우한제▁using▁for▁a를 사용하는 것입니다.git log여기 안드레가 설명한 것처럼:

git log -p -M --follow --stat -- path/to/your/file

이전 답변을 바탕으로, 이 바보 같은 원라이너는 당신이 원하는 것을 제공할 것입니다.특정 파일의 특정 행에 대한 최근 5개의 수정사항을 통해 Gitburn 내역을 표시합니다.

LINE=10 FILE=src/options.cpp REVS=5; for commit in $(git rev-list -n $REVS HEAD $FILE); do git blame -n -L$LINE,+1 $commit -- $FILE; done

이 명령어의 출력에는 특정 커밋에 대한 줄 변경 내용이 표시되거나 표시된 줄 번호가 변경될 수도 있습니다.

이는 종종 특정 커밋 후 처음으로 행이 추가되었음을 나타냅니다.또한 줄이 파일의 다른 부분에서 이동되었음을 나타낼 수 있습니다.

또 있습니다.설치할 수 있습니다.

npm install -g recursive-blame

JetBrains Idea IDE(및 파생상품)를 사용하는 경우 여러 줄을 선택하고 상황에 맞는 메뉴를 마우스 오른쪽 단추로 클릭한 다음 Git -> 선택할 내역을 표시할 수 있습니다.선택한 라인에 영향을 주는 커밋 목록이 표시됩니다.

여기에 이미지 설명 입력

Git 2.23 기준으로 git black --ignore-rev를 사용할 수 있습니다.

질문에 제시된 예는 다음과 같습니다.

git blame -L10,+1 src/options.cpp --ignore-rev fe25b6d

(그러나 fe25b6d가 파일의 첫 번째 개정판이기 때문에 속임수 질문입니다!)

Stangls답변을 바탕으로 이 스크립트를 (윈도우즈에서도) 내 PATH에 git-bh로 넣었습니다.

이를 통해 단어가 포함된 모든 커밋을 찾을 수 있습니다.

git bh path/to/myfile myWord

스크립트:

#!/bin/bash
f=$1
shift
csha=""
{ git log --pretty=format:%H -- "$f"; echo; } | {
  while read hash; do
    res=$(git blame -L"/$1/",+1 $hash -- "$f" 2>/dev/null | sed 's/^/  /')
    sha=${res%% (*}
    if [[ "${res}" != "" && "${csha}" != "${sha}" ]]; then
      echo "--- ${hash}"
      echo "${res}"
      csha="${sha}"
    fi
  done
}

윌 셰퍼드의 답변을 기반으로, 그의 출력에는 변경이 없었던 커밋에 대한 중복된 행이 포함되므로 다음과 같이 필터링할 수 있습니다( 답변 사용).

LINE=1 FILE=a; for commit in $(git rev-list HEAD $FILE); do git blame -n -L$LINE,+1 $commit -- $FILE; done | sed '$!N; /^\(.*\)\n\1$/!P; D'

REVS 인수를 제거하면 루트 커밋으로 돌아갑니다.이것은 위의 Max Nanasy의 관찰 때문입니다.

David N의 답변을 바탕으로 이름이 바뀐 파일을 추적하고 싶습니다.

LINE=8 FILE=Info.plist; for commit in $(git log --format='%h%%' --name-only --follow -- $FILE | xargs echo | perl -pe 's/\%\s/,/g'); do hash=$(echo $commit | cut -f1 -d ','); fileMayRenamed=$(echo $commit | cut -f2 -d ','); git blame -n -L$LINE,+1 $hash -- $fileMayRenamed; done | sed '$!N; /^\(.*\)\n\1$/!P; D'

ref: 파일 이름 변경 기록을 git 로그에 표시합니다.

저는 이 작은 bash 스크립트를 사용하여 비난 내역을 봅니다.

첫 번째 매개 변수: 확인할 파일

후속 매개 변수: git brack으로 전달됨

#!/bin/bash
f=$1
shift
{ git log --pretty=format:%H -- "$f"; echo; } | {
  while read hash; do
    echo "--- $hash"
    git blame $@ $hash -- "$f" | sed 's/^/  /'
  done
}

-L 70,+10과 같은 책임 매개변수를 제공할 수도 있지만 일반적으로 줄 번호는 시간이 지남에 따라 "변경"되기 때문에 git debut의 정규식 검색을 사용하는 것이 좋습니다.

나는 썼습니다.ublame주어진 검색어에 영향을 준 파일 커밋의 단순한 기록을 반환하는 파이썬 도구는 프로젝트 페이지에서 더 많은 정보를 찾을 수 있습니다.

언급URL : https://stackoverflow.com/questions/5098256/how-can-i-view-prior-commits-with-git-blame

반응형