'잃어버린'커밋을 포함하여 모든 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에게 이름이없는 브랜치의 커밋을 포함하여 모든 커밋을 말해 줄 수 있을까?
감사
특히 쉽지는 않습니다. 가지 끝에 대한 포인터를 잃어버린 경우 건초 더미에서 바늘을 찾는 것과 같습니다. 더 이상 참조되지 않는 것으로 보이는 모든 커밋을 찾을 수 있습니다. git fsck --unreachable
이 작업을 수행합니다.하지만 여기에는 git commit --amend
리베이스 한 브랜치에 대한 오래된 커밋 등이 포함됩니다. 따라서 이러한 커밋을 모두 볼 수 있습니다. 한 번에 통과하기에는 너무 많은 정보가있을 가능성이 큽니다.
따라서 엉뚱한 대답은, 당신이 관심있는 것들을 놓치지 말라는 것입니다. 더 진지하게, reflog는 당신이 기본적으로 지난 60 일 동안 사용한 모든 커밋에 대한 참조를 보유 할 것입니다. 더 중요한 것은 해당 커밋 이 무엇인지에 대한 컨텍스트를 제공한다는 것 입니다.
시험:
git log --reflog
reflogs ( git reflog
)에서 언급 한 모든 개체 가 명령 줄에 <commit>
.
이 문제를 해결할 때 다음 명령을 사용합니다.
git reflog | awk '{ print $1 }' | xargs gitk
이를 통해 헤드리스가 된 최근 커밋을 시각화 할 수 있습니다.
나는 이것을라는 스크립트 도우미에 싸여 ~/bin/git-reflog-gitk
있습니다.
@Kieran의 답변과 비슷하지만 콘솔의 경우 : git log --oneline --all --graph --decorate $(git reflog | awk '{print $1}')
이 문제를 어떻게 해결합니까? 사용 git fsck
및 로깅!
먼저 손실 된 (연결할 수없는) 커밋 및 Blob을 포함하는 파일을 만듭니다. (참고 : git gc
다음 과 같은 작업 을 수행하면 모든 커밋을 가비지 수집하고 여기서 찾을 수 없습니다!)
$git fsck --lost-found > lost_found.commits
그러면 다음과 같은 파일이 생성됩니다.
매달려 dec2c5e72a81ef06963397a49c4b068540fc0dc3 커밋
매달려 방울 f8c2579e6cbfe022f08345fa7553feb08d60a975
매다는 방울 0eb3e86dc112332ceadf9bc826c49bd371acc194
매다는 방울 11cbd8eba79e01f4fd7f496b1750953146a09502
매달려 커밋 18733e44097d2c7a800650cea442febc5344f9b3
매달려 방울 1e53a5cdb3ecdde27081ec6e8b31e4070106ee05을
그런 다음 좋아하는 텍스트 편집기로이 파일을 열어 커밋 / 블로그 해시를 복사 할 수 있습니다. (* 기침 * vim 매크로는이 * 기침에 효과적입니다 *)
이제이 커밋에서 git log --oneline <commit hash>
. 또는 gitk, tig 또는 다른 git 뷰어가 작동해야합니다.
귀하의 경우 커밋 F에 대한 해시를 찾으면 로그에 다음과 같은 내용이 표시됩니다.
A---B---E---F
빠르고 쉬운! 이제 모든 매달린 커밋 뒤에있는 컨텍스트를 찾을 수 있습니다.
추신 : 예, 저도 알고 있습니다. 포스트 포스트가 늦었지만 누군가 여기에서 유용하다고 생각할 수도 있습니다. (대부분 6 개월 후에 다시 구글을 검색 할 때)
내 생명을 구한 것은 다음과 같은 명령이었습니다.
git reflog
거기에 다음과 같은 git에 대한 히스토리 커밋이있는 화면이 있습니다.
이 시점에서 HEAD@{X}
필요한 것을 찾아 임시 브랜치를 만들고 다음과 같이 이동하면됩니다.
git checkout -b temp_branch HEAD@{X}
이렇게하면 git 저장소를 리베이스하거나 중단하지 않고도 잃어버린 커밋이있는 임시 분기를 갖게됩니다.
도움이 되었기를 바랍니다...
I've had luck recovering the commit by looking at the reflog, which was located at .git/logs/HEAD
I then had to scoll down to the end of the file, and I found the commit I just lost.
We'll git log
sometimes is not good to get all commits detail, so to view this...
For Mac: Get into you git project and type:
$ nano .git/logs/HEAD
to view you all commits in that, or:
$ gedit .git/logs/HEAD
to view you all commits in that,
then you can edit in any of your favourite browser.
@bsimmons
git fsck --lost-found | grep commit
Then create a branch for each one:
$ 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
Now many tools will show you a graphical visualization of those lost commits.
Git Extensions GUI를 사용하는 경우 "View-> Show reflog reference"를 선택하면 매달린 커밋의 그래픽 시각화를 볼 수 있습니다. 이것은 다른 모든 참조 된 것과 마찬가지로 트리에 매달린 커밋을 표시합니다. 이렇게하면 찾고있는 것을 더 쉽게 찾을 수 있습니다.
데모는 이 이미지 를 참조하십시오 . 이미지의 커밋 C2, C3, C4 및 C5가 매달려 있지만 여전히 표시됩니다.
참고 URL : https://stackoverflow.com/questions/4786972/get-a-list-of-all-git-commits-include-the-lost-ones
'IT박스' 카테고리의 다른 글
data.frame 행을 목록으로 (0) | 2020.08.07 |
---|---|
IntelliJ와 Tomcat .. 하우투 ..? (0) | 2020.08.07 |
삭제 된 파일을 복원 할 수 있습니까 (`git clean -fdx` 실행 취소)? (0) | 2020.08.07 |
tar.gz와 tgz는 같은 것입니까? (0) | 2020.08.07 |
Android : 활동을 호출하는 활동에 결과를 반환하는 방법은 무엇입니까? (0) | 2020.08.07 |