development

git reflog와 log의 차이점은 무엇입니까?

big-blog 2020. 6. 16. 07:52
반응형

git reflog와 log의 차이점은 무엇입니까?


매뉴얼 페이지에 log는 커밋 로그를 표시하고 reflog는 reflog 정보를 관리합니다. Reflog 정보 란 정확히 무엇이며 로그에없는 정보는 무엇입니까? 로그가 훨씬 더 자세한 것 같습니다.


git log현재 헤드와 조상을 보여줍니다. 즉, 확약 HEAD 포인트를 인쇄 한 다음 상위, 상위 등을 인쇄합니다. 각 커밋의 부모를 재귀 적으로 찾아서 repo의 조상을 통과합니다.

실제로 일부 커밋에는 부모가 둘 이상 있습니다.보다 대표적인 로그를 보려면와 같은 명령을 사용하십시오 git log --oneline --graph --decorate.

git reflogHEAD의 조상을 전혀 횡단하지 않습니다. reflog는 HEAD가 지적한 커밋 순서 목록입니다. 리포지토리에 대한 실행 취소 기록입니다. reflog는 저장소 자체의 일부가 아니며 (커밋 자체에 별도로 저장 됨) 푸시, 가져 오기 또는 복제에 포함되지 않습니다. 순전히 로컬입니다.

따로 : reflog를 이해하면 커밋 된 리포지토리에서 데이터를 잃을 수 없습니다. 실수로 이전 커밋으로 재설정하거나 잘못 리베이스하거나 커밋을 시각적으로 "제거"하는 다른 작업을 수행 한 경우 reflog를 사용 git reset --hard하여 이전 상태로 되돌아 간 위치를 확인하여 이전 상태를 복원 할 수 있습니다. 심판은 커밋뿐만 아니라 그 뒤에있는 모든 역사를 암시합니다.


  • git log 심판 (머리, 태그, 리모컨)에서 액세스 할 수있는 커밋 로그를 보여줍니다
  • git reflog언제든지 리포지토리에서 참조되었거나 참조 된 모든 커밋에 대한 기록 입니다.

그렇기 때문에 git reflog( 분기 삭제와 같은) "파괴적인"작업을 수행 할 때 해당 분기에서 참조한 SHA1을 다시 가져올 때 (기본적으로 90 일 후에 정리 된 로컬 녹화)가 사용됩니다.
참조 git config:

gc.reflogexpire
gc.<pattern>.reflogexpire

git reflogexpire는이 시간보다 오래된 reflog 항목을 제거합니다. 기본값은 90 일입니다. 중간에
" <pattern>"(예 : " refs/stash")가 있으면 설정이에 일치하는 참조에만 적용됩니다 <pattern>.

안전망

git reflog종종 " 안전망 "이라고합니다

문제가 발생하면 git log가 찾고있는 것을 보여주지 않을 때의 일반적인 조언은 다음과 같습니다.

" 침착하게 사용하십시오git reflog "

침착하게

다시 한 번, reflog는 SHA1의 로컬 레코딩입니다.
반대로 git log: 리포지토리를 업스트림 리포지토리 로 푸시 하면 동일 git log하지만 반드시 같은 것은 아닙니다 git reflog.


Pro Git 책에 대한 설명은reflog 다음과 같습니다 .

Git이 퇴근하는 동안 백그라운드에서 수행하는 작업 중 하나는 지난 몇 개월 동안 HEAD 및 지점 참조가 있었던 위치에 대한 기록을 유지하는 것입니다.

다음을 사용하여 Reflog를 볼 수 있습니다 git reflog.

$ git reflog
734713b... HEAD@{0}: commit: fixed refs handling, added gc auto, updated
d921970... HEAD@{1}: merge phedders/rdocs: Merge made by recursive.
1c002dd... HEAD@{2}: commit: added some blame and merge stuff
1c36188... HEAD@{3}: rebase -i (squash): updating HEAD
95df984... HEAD@{4}: commit: # This is a combination of two commits.
1c36188... HEAD@{5}: rebase -i (squash): updating HEAD
7e05da5... HEAD@{6}: rebase -i (pick): updating HEAD

어떤 이유로 든 브랜치 팁을 업데이트 할 때마다 Git은이 임시 기록에 해당 정보를 저장합니다. 이 데이터로 이전 커밋을 지정할 수도 있습니다.

The reflog command can also be used to delete entries or expire entries from the reflog that are too old. From the official Linux Kernel Git documentation for reflog:

The subcommand expire is used to prune older reflog entries.

To delete single entries from the reflog, use the subcommand delete and specify the exact entry (e.g. git reflog delete master@{2}).


I was curious about this as well and just want to elaborate and summarize a bit:

  1. git log shows a history of all your commits for the branch you're on. Checkout a different branch and you'll see a different commit history. If you want to see you commit history for all branches, type git log --all.

  2. git reflogCupcake가 말한 참조 기록을 보여줍니다. 커밋 또는 체크 아웃 할 때마다 항목이 있습니다. 사용하여 앞뒤로 두 가지 사이에 몇 번 전환 시도 git checkout하고 실행 git reflog각 체크 아웃 후. 매번 상단 항목이 "체크 아웃"항목으로 업데이트되는 것을 볼 수 있습니다. 에 이러한 유형의 항목이 표시되지 않습니다 git log.

참고 문헌 : http://www.lornajane.net/posts/2014/git-log-all-branches


실제로 reflog는

 git log -g --abbrev-commit --pretty=oneline

답은 다음과 같아야합니다. 특정한 경우입니다.

참고 URL : https://stackoverflow.com/questions/17857723/whats-the-difference-between-git-reflog-and-log

반응형