누군가는 몇 달 전에 뭔가를 저지른 사람입니다. 그 후에 여러 다른 커밋이 수행되었습니다. 어떤 사람이 수정이나 리베이스하여 해당 커밋의 내용을 변경했는지 확인할 수 있습니까? 그렇다면 어떻게?git commit이 변경되었는지 어떻게 알 수 있습니까?
답변
커밋에서 Git은 이 아니며이 변경되었습니다. rebase도 git commit --amend
도 커밋을 변경하지 않습니다. 불가능합니다.
여기서 트릭은 "커밋"을 정의하는 것입니다. 어떤 커밋인지 어떻게 알 수 있습니까? "Git for Git 저장소에서 커밋하기"라고 말하면, 거기에는 4 만 개가 넘는 커밋이있다. 어느 쪽이을 의미합니까?
확실한 확실한 방법은 입니다.에게 알려 주시면 해시 ID (예 : 9b7cbb315923e61bb0c4297c701089f30e116750
)를 알려 드릴 수 있습니다. 이는 하나의 특정 커밋에 대한 실제 이름입니다.
$ git cat-file -p 9b7cbb315923e61bb0c4297c701089f30e116750 | sed 's/@/ /'
tree 4ba58c32960dcecc1fedede9c9362f5c10158f08
parent 77933f4449b8d6aa7529d627f3c7b55336f491db
author Junio C Hamano <gitster pobox.com> 1418845774 -0800
committer Junio C Hamano <gitster pobox.com> 1418845774 -0800
Git 2.2.1
Signed-off-by: Junio C Hamano <gitster pobox.com>
이 이름은이 커밋에 영구적으로 첨부됩니다. 그것은 확실히 다루기 힘들고 못생긴 이름이다. 더 짧고, 예쁘다, wieldy 이름을 갖는 것이 좋지 않겠습니까? 그리고 일이 : 나는 v2.2.1
당신을 가리킬 수 있습니다
$ git rev-parse v2.2.1^{commit}
9b7cbb315923e61bb0c4297c701089f30e116750
그러나 사실
,v2.2.1
는 전혀, 그것은
태그의 커밋되지 않습니다.
$ git rev-parse v2.2.1
7c56b20857837de401f79db236651a1bd886fbbb
태그 개체 : 구체적으로는, 태그 이름 (refs/tags/v2.2.1
또는 이름 v2.2.1
아래 packed-refs
파일에)를 주석 태그 오브젝트를 가리키는, 2 오히려 직접보다 미트로는
$ git cat-file -p v2.2.1 | sed 's/@/ /'
object 9b7cbb315923e61bb0c4297c701089f30e116750
type commit
tag v2.2.1
tagger Junio C Hamano <gitster pobox.com> 1418851265 -0800
Git 2.2.1
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABAgAGBQJUkfPBAAoJELC16IaWr+bLjfgP/iA78fk3NkTEROoyIVq6kPDH
pZAlm4ObsKXAdl6sFqWe7xFxGExHYzJ5L3qGXs3VM+9Z3iDe2WZN3WbK3aFtYqfU
AYRSTpnPzDf4L0vfyqiFS7//+LoeM2TogAV7SLdehMlodsL5HR6FiSz1zffSq8D0
Ci4XpGWHkqXLhfvUPC7foCgGpf7l38gsbJPbdkyKLK9/wtLSfkk45vK+wY6o3CCv
JKBFr468958fvw+j73nxiT+Vne7TeL1Bq1kCq9M65dAjOpFjZiD408NaF7jTcNcx
TMjdKoVlDNFHcUPMv9B5C308sRVUylmeUzb8XrQNji0+1NA5ivVgDfZsudWUtlTj
jo9xku0Np4IdXPwxJNlO5tC2rnof4gdD4jWPJj/DvellNKCDXuLuXDZSKZDI9GSr
OzLsad8uFX3MySPe+evIVF6qGS2KzI8PGNrohqWaPkX8cug22EW7lKJFpjYJb5gP
3nJUJvbsrMeyoH/GqxPzA5clqMGtsirnTiapMILNRmlC+3rzc0DkLw90BM6vKNOC
eDTOI9Xj1JS9qbD6fEkxVNrXRDz0TFbtpFbFTtKk4zfAc/jTOqE9fqpV7afoQfON
e1NwrjR5Kcts7ev23Y0G1WH3t2L0N2/q27kcjrulCEH1vtXlmaZFU6o+WKUVV7iH
/YQnjNUOgRxQ1zBGof7h
=yJ4Q
-----END PGP SIGNATURE-----
가 PGP 서명이 우리가 Junio C 하마노 정말 만든이 태그를 체결 믿고 여부를 결정할 수 있습니다 것입니다 :는 "PGP 서명"을 포함하여 그 안에 커밋 ID, 플러스 추가 버릇의 전체 무리가있다. SHA-1보다 더 강력한 형태의 암호화 디지털 서명을 사용합니다 (SHA-1은 적어도 이론상 깨뜨릴 수 있기 때문에 분해가 가능함). 은 서명 (SHA-1 그 자체는하지 않습니다).
결국 우리가 신뢰할 수 있고/또는 확인할 수있는 사람이 그러한 PGP 서명 태그를 만들었거나 PGP 서명이 커밋 된 경우에만 도움이됩니다. 이론적으로 각 커밋에 서명하는 것은 커밋에 직접 디지털 서명이 있기 때문에 조금 더 강력 할 수 있습니다. 그러나 실제적으로, 태그를 서명하는 것이 훨씬 편리하고, SHA-1을 끊는 것에 대해 정기적으로 가지 않기 때문에 (그리고 적어도 현재의 무차별 대항법에서는 적어도 우리가했다면 명백한 표시가 남을 것입니다. 이 대답의 범위를 벗어나는 방법, 그리고 나보다 다소 적절하게 설명하는 것 - 암호화는 내 분야가 아닙니다. 당신이 break the SHA-1 hash을 할 수있는 경우에
1 글쎄, 그것은 이론적으로 가능합니다. 그럼에도 불구하고 괴짜가 새로운 객체를 만들면 같은 해시을 생성하는 방식으로 이전 객체를 이미 가지고 있다면이 새로운 객체를 선택하지 않아도됩니다.이 규칙은 모든 Git 객체 (커밋, 트리, 주석이 달린 태그 및 블롭)에 적용되며이 모든 객체는 해시로 명명됩니다.
무엇 git rebase
및 git commit --amend
들이 커밋을 변경 것처럼 이을 보일 수 있도록, 수행, 기존의 커밋의 새 복사본을 만드는 것입니다, 다음 는 주위에 이름을 섞는다. 새로운 커밋에는 새롭고 다른 해시가 있고 이후에 (자손) 커밋은 말 그대로 직계 조상 (부모) 커밋의 해시를 포함하고 커밋의 해시를 "변경"합니다 (즉, 커밋 개체를 새로운 다른 커밋 객체)는 변경 사항이 나머지 커밋을 통해 버블 다운되도록합니다. 그런 다음 기존 (짧은, 가지 또는 태그) 이름을 새 체인 끝으로 다시 지정합니다.
우리가 믿을 수있는 엔드 포인트가 주어지면 체인 또는 트리의 이전 개체 각각으로 신뢰를 확장 할 수 있습니다. 이에 대한 전문 용어는 Merkle tree입니다.
이 힘내는 "주석 태그"를 호출 무엇을하게2 다음으로, 망할 놈의 저장소에 저장 주석 태그 객체를 가리키는 (그 자체로 "경량 태그"가 될 것입니다) 태그 이름을, 다른 Git 객체를 가리키는 태그 객체 (일반적으로 커밋이지만 다른 태그 또는 심지어 트리 또는 blob). 그러나 "다른 태그"조차도 다소 드물다. Git의 Git 저장소에는이 중 세 가지가 있으며 나머지 두 개는 실제로 전례가 없다.
놀라운 설명. 고맙습니다. –
- 1. 시스템 시계가 변경되었는지 어떻게 알 수 있습니까?
- 2. TableViewer에서 셀이 변경되었는지 어떻게 알 수 있습니까?
- 3. 파일의 이름이 변경되었는지 어떻게 알 수 있습니까?
- 4. 데이터베이스 레코드가 변경되었는지 어떻게 알 수 있습니까?
- 5. 데이터가 변경되었는지 어떻게 알 수 있습니까?
- 6. 파일의 이름이 변경되었는지 어떻게 알 수 있습니까?
- 7. 시스템 시간이 변경되었는지 어떻게 알 수 있습니까?
- 8. 모델이 변경되었는지 여부는 어떻게 알 수 있습니까?
- 9. git에 위탁하기 전에 파일에서 무엇이 변경되었는지 어떻게 알 수 있습니까?
- 10. 어떻게 이맥스에게 내 자식 분기가 변경되었는지 알 수 있습니까?
- 11. addTextChangedListener에서 어떻게 텍스트가 변경되었는지 알 수 있습니다.
- 12. xcode git commit이 실행되지 않습니다.
- 13. git 저장소의 깊이를 어떻게 알 수 있습니까?
- 14. iFrame의 src가 변경되었는지 여부를 알 수 있습니까?
- 15. 최근에 파일에서 무엇이 변경되었는지 알 수 있습니까?
- 16. 내 ObjectContext가 변경되었는지 쉽게 알 수 있습니까?
- 17. Grails 도메인 POJO가 검색된 후 변경되었는지 어떻게 알 수 있습니까?
- 18. Autohotkey - 마우스 커서가 텍스트 커서로 변경되었는지 어떻게 알 수 있습니까?
- 19. TFS SDK - 수정에서 어떤 필드가 변경되었는지 어떻게 알 수 있습니까?
- 20. .NET C#에서 파일이 변경되었는지 어떻게 알 수 있습니까?
- 21. 긁히는 웹 사이트가 변경되었는지 어떻게 알 수 있습니까?
- 22. jQuery : html이 주어진 요소 내에서 변경되었는지 어떻게 알 수 있습니까?
- 23. 테이블의 열이 실제로 변경되었는지 어떻게 알 수 있습니까?
- 24. Android 용으로 datepicker가 변경되었는지 어떻게 알 수 있습니까?
- 25. Android Activity에서 textBox가 변경되었는지 어떻게 알 수 있습니까?
- 26. ASP.Net 응용 프로그램의 viewstate가 변경되었는지 어떻게 알 수 있습니까?
- 27. jsp 필드 값이 Struts2에서 변경되었는지 여부를 어떻게 알 수 있습니까?
- 28. 배열에서 어떤 데이터가 변경되었는지 어떻게 알 수 있습니까?
- 29. Git Commit이 새로운 헤드 - PyCharm을 만듭니다.
- 30. git commit이 현재 작업 트리에 있는지 확인하십시오.
정보로 무엇을 하시겠습니까? – NiVeR
나는 방해 행위가 있었고 이것이 사실인지 알고 싶습니다. –
이전 저장소에 동일한 저장소가 여전히 복제되어있는 경우 두 커밋의 해시 코드를 비교하면됩니다. – choroba