작업이 손실되는 이상한 문제가 발생합니다. 동료가 며칠 전에 원격 지사에 커밋을했습니다. 어제 언젠가 원격 지점이 마스터에 병합되었습니다. 내 동료 중 하나가 저지른 모든 변화가 사라졌습니다. 일반적으로 나는 나쁜 병합이라고 말하고 그의 변화를 덮어 썼다. 그러나 로그에는이를 반영하지 않습니다. 내가 gitk로 로그를 확인하면, 커밋 3a2b22f (동료가 원래 커밋) 목록 아래로 좋은 방법을 볼 수 있지만 문제의 파일에서 gitk를 실행하면 (역사를 확인하기 위해) 커밋 3a2b22f는 볼 수없는 곳입니다. 마치 병합 후에 커밋이 파일 기록에 없어졌습니다.병합 후 자식 커밋이 사라집니다.
질문은 다음과 같습니다
- 어떻게 지구에이
- 이 어떻게 다시 발생하지 않도록 않습니다 일어 났습니까? 당신이 등, 병합이 일어난 위치를 알아낼 수있는 명령 줄 상응
git log --pretty=oneline --graph --all -- filename.txt
이 될 것이다, 그래서
'git log --all - filename.txt' 또는'gitk --all - filename.txt'를 시도하십시오. IIRC는 기본적으로 병합을 통해 첫 번째 부모를 따라갑니다 ... – twalberg
좋습니다. 로그와 함께 표시됩니다. 여전히 변경 사항을 덮어 쓰는 방법을 정확히 알지 못합니다. 어쩌면 그것은 결국 나쁜 합병이었을 것입니다. – CountMurphy
변경 사항이 예를 들어 'HEAD ~ 10'을 저지하십시오. 그러나 HEAD에 있지는 않습니다. 병합이 일어난 곳이 바로 그것 일 가능성이 있습니다. 그러나 이것이 유일한 후보는 아닙니다. 간단한'grep' 기반 검사 (또는'git log --all -p-filename.txt'의 육안 검사)로'git bisect'를 사용하면 변경 사항이 손실/되돌리기/반전/대체 위치를 결정하는 합리적인 방법이됩니다 ... – twalberg