programing

'잃어버린' git 커밋을 포함한 모든 git 커밋 목록을 가져옵니다.

starjava 2023. 6. 26. 20:44
반응형

'잃어버린' git 커밋을 포함한 모든 git 커밋 목록을 가져옵니다.

다음과 같은 그래프가 있다고 가정해 보겠습니다.

A---B---C---D (master)
     \
      \-E---F (HEAD)

내가 하면,git log --all --oneline저는 제 커밋 6개를 모두 받을 것입니다.

하지만 그래프가

A---B---C---D (master, HEAD)
     \
      \-E---F

나는 E와 F를 보지 않을 것입니다.이름이 지정되지 않은 지점의 커밋을 포함하여 모든 커밋을 알려줄 수 있습니까?

감사해요.

시도:

git log --reflog

reflogs에서 git 커밋을 합니다.git reflog는에 )로 되어 있습니다.<commit>.

특별히 쉽지는 않습니다. 나뭇가지 끝에 대한 포인터를 잃어버렸다면 건초더미에서 바늘을 찾는 것과 같습니다. 수 . - 더 이 참 조 커 수 있 습 니 다 찾 을 을 밋 상git fsck --unreachable당신을 위해 이것을 할 것입니다. 하지만 그것은 당신이 잠시 후에 버린 커밋을 포함할 것입니다.git commit --amend당신이 근거한 지점 등에 대한 오래된 커밋.따라서 이 모든 커밋을 한 번에 보는 것은 지나치기에는 너무 많은 정보일 가능성이 높습니다.

그래서 경솔한 대답은, 여러분이 관심 있는 것들을 놓치지 말라는 것입니다.더 중요한 것은, reflog가 기본적으로 지난 60일 동안 사용한 모든 커밋에 대한 참조를 보유한다는 것입니다.더 중요한 것은, 그들이 그 약속들이 무엇인지에 대한 몇 가지 맥락을 제공할 것이라는 점입니다.

내 목숨을 구한 것은 다음과 같은 명령이었습니다.

git reflog

여기에는 다음과 같은 기록 커밋이 수행된 화면이 있습니다.

enter image description here

이 시점에서, 당신은 단지 다음을 찾기만 하면 됩니다.HEAD@{X}필요한 경우 임시 분기를 생성하고 다음과 같이 이동합니다.

git checkout -b temp_branch HEAD@{X}

이렇게 하면 Git 저장소를 더 이상 기본으로 변경하거나 중단하지 않고 손실된 커밋이 포함된 임시 분기가 생성됩니다.

이게 도움이 되길...

이 문제를 해결할 때는 다음 명령을 사용합니다.

git reflog |  awk '{ print $1 }' | xargs gitk

이를 통해 헤드리스가 된 최근 커밋을 시각화할 수 있습니다.

▁helper▁called다▁a라는 스크립트 도우미에 포장했습니다.~/bin/git-reflog-gitk.

- 되었습니다. - " - " " " " - " " git-reflog-gitk "라고 수 .gitk --reflog

@ Answer처럼 @Kieran's Answer git log --oneline --all --graph --decorate $(git reflog | awk '{print $1}')

git log --reflog

내가 죄를 !HEAD를 병합하는 동안 내 것을 잃어버렸고 내 최신 커밋을 찾을 수 없었습니다!원본 트리에 표시되지 않지만git log --reflog 커밋을 하기 전에 이컬커표

이 문제를 어떻게 해결해야 합니까?사용하다git fsck그리고 벌목!

먼저 손실된(연결할 수 없는) 커밋 및 블롭이 포함된 파일을 만듭니다.(참고: 만약 당신이 다음과 같은 일을 했다면.git gc그러면 그것은 그들이 커밋한 모든 것을 쓰레기로 수집할 것이고 당신은 여기에서 그들을 찾을 수 없을 것입니다!)

$git fsck --lost-found > lost_found.commits

그러면 다음과 같은 파일이 제공됩니다.

dangling commit dec2c5e72a81ef06963397a49c4b068540fc0dc3
feb08d60a975 dangling blob f8c2579e6cbfe022f0845f7553 feb08d60a975
ceadf9bc826c49bd371acc194dangling blob0eb3e86dc112332 ceadf9bc826c49bd371acc194
11cbd8eba79e01f4fd7f496b1750953144a09502달11cbd8eba79e01f4fd7f496b1750953144a09502링
18733e44097d2c7a800650cea442febc5344f9b3dangling 커밋 18733e44097d2c7a800650cea442fec5344f9b3
blob 달롭블링 1e53a5cdb3ecdde27081ec6e8b31e4070106ee05

그런 다음 원하는 텍스트 편집기로 이 파일을 열어 커밋/블로그 해시를 복사할 수 있습니다.(*vim*vim 매크로는 이 *vim*에 적합합니다.)

은 이 에서 " 제이커수있습다니할로백그이서에"와 같은 으로 다시 할 수 .git log --oneline <commit hash>또는 gitk, tig 또는 다른 git 뷰어가 작동해야 합니다.

당신의 경우, 만약 당신이 커밋 F의 해시를 찾는다면, 로그는 당신에게 다음과 같은 것을 보여줄 것입니다.

A---B---E---F

빠르고 쉽게!이제 여러분은 그 모든 매달린 커밋 뒤에 숨겨진 맥락을 찾을 수 있습니다.

추신: 네, 저도 알아요, 늦은 게시물이지만, 오, 누군가가 여기서 그것을 찾고 유용하다고 생각할 수도 있습니다. (내가 이것을 다시 구글링할 때, 아마도 6개월 후에 나일 것입니다.)

저는 리필로그를 보고 커밋을 복구하는 행운을 누렸습니다..git/logs/HEAD

그리고 나서 저는 파일의 끝까지 아래로 스크롤해야 했고, 방금 잃어버린 약속을 발견했습니다.

저희가git log때때로 모든 커밋 세부 정보를 가져오는 것은 좋지 않습니다. 따라서 이 정보를 보려면...

Mac의 경우: git 프로젝트에 들어가 다음을 입력합니다.

$ nano .git/logs/HEAD

해당 항목의 모든 커밋을 보려면 다음을 수행합니다.

$ gedit .git/logs/HEAD

모든 커밋을 보려면,

원하는 브라우저에서 편집할 수 있습니다.

은 정로말.git fsck손실된 모든 커밋을 찾는 데 사용할 수 있습니다. 올바른 옵션만 있으면 됩니다.

git fsck --unreachable --no-reflogs

--unreachable일부 커밋은 여전히 reflog에서 참조될 수 있으므로 단독으로는 충분하지 않습니다.전체 커밋 기록에 대한 명확한 보기가 필요한 경우 다음과 같은 항목에 대한 별칭을 생성할 수 있습니다.

git log --all --decorate --oneline --graph $(git fsck --no-reflogs --unreachable | awk '{if ($2 == "commit") print $3}')

이 에 솔히이마명필요잘모지다니습르겠한령에직막지▁다▁in▁need▁you▁to니▁this가 필요한지 잘 모르겠습니다.--unreachable 때할고항, 선사택이 때.git log단, 그적않단횡단조경상(우, 렇은지로으기)).--no-walk 나는 합니다.나는 그것에 내기를 하지 않을 것이지만, 나는 그것이 필요하지 않다고 생각합니다.

@비시몬스

git fsck --lost-found | grep commit

그런 다음 각 분기에 대해 분기를 만듭니다.

$ git fsck --lost-found | grep commit
Checking object directories: 100% (256/256), done.
dangling commit 2806a32af04d1bbd7803fb899071fcf247a2b9b0
dangling commit 6d0e49efd0c1a4b5bea1235c6286f0b64c4c8de1
dangling commit 91ca9b2482a96b20dc31d2af4818d69606a229d4

$ git branch  branch_2806a3 2806a3
$ git branch  branch_6d0e49 6d0e49
$ git branch  branch_91ca9b 91ca9b

이제 많은 도구가 손실된 커밋의 그래픽 시각화를 보여줍니다.

Git Extensions GUI를 사용하는 경우 "View -> Show reflog references"를 선택하면 매달린 커밋의 그래픽 시각화를 표시할 수 있습니다.다른 모든 참조된 커밋과 마찬가지로 트리에 있는 커밋이 표시됩니다.이렇게 하면 찾고 있는 것을 훨씬 쉽게 찾을 수 있습니다.

자세한 내용은 이 이미지를 참조하십시오.이미지의 커밋 C2, C3, C4 및 C5가 매달려 있지만 여전히 표시됩니다.

언급URL : https://stackoverflow.com/questions/4786972/get-a-list-of-all-git-commits-including-the-lost-ones

반응형