"git pull"을 실행할 때 파일의 마지막 버전과 새 버전간에 무엇이 변경되었는지 자주 알고 싶습니다. 다른 사람이 특정 파일에 어떤 작업을 수행했는지 알고 싶습니다.
어떻게 된 거죠?
커밋 x 대 커밋 y에 대한 일부 매개 변수가있는 "git diff"라고 가정하고 있지만 구문을 얻을 수없는 것 같습니다. 또한 "git log"가 약간 혼란스럽고 최신 버전의 파일과 새 버전의 커밋 ID를 어디서 구해야할지 모르겠습니다.
"git pull"을 실행할 때 파일의 마지막 버전과 새 버전간에 무엇이 변경되었는지 자주 알고 싶습니다. 다른 사람이 특정 파일에 어떤 작업을 수행했는지 알고 싶습니다.
어떻게 된 거죠?
커밋 x 대 커밋 y에 대한 일부 매개 변수가있는 "git diff"라고 가정하고 있지만 구문을 얻을 수없는 것 같습니다. 또한 "git log"가 약간 혼란스럽고 최신 버전의 파일과 새 버전의 커밋 ID를 어디서 구해야할지 모르겠습니다.
답변:
커밋을 지정하는 모든 종류의 멋진 방법이 있습니다. 자세한 내용 은의 개정 지정 섹션 man git-rev-parse을 참조하세요. 이 경우 다음을 원할 것입니다.
git diff HEAD@{1}
이것은 @{1}"내가 지정한 심판의 이전 위치"를 의미하므로 풀 직전 이전에 체크 아웃 한 내용으로 평가됩니다. HEAD작업 트리에 약간의 변경 사항이 있고 그 차이를보고 싶지 않은 경우 끝에 끝낼 수 있습니다 .
"내 최신 버전 파일의 커밋 ID"로 무엇을 요청하는지 잘 모르겠습니다. 커밋 "ID"(SHA1 해시)는 출력의 모든 항목의 맨 위에있는 40 자 16 진수입니다. 자식 로그의. 주어진 파일이 아니라 전체 커밋에 대한 해시입니다. 더 이상 필요하지 않습니다. 풀에서 하나의 파일 만 비교하려면 다음을 수행하십시오.
git diff HEAD@{1} filename
이것은 일반적인 것입니다. 주어진 커밋에서 파일의 상태를 알고 싶다면 파일에 특정한 ID / 해시가 아니라 커밋과 파일을 지정합니다.
@{1}의 약자로 사용 HEAD@{1})
나는 사용하고 싶다 :
git diff HEAD^
또는 특정 파일 만 비교하려는 경우 :
git diff HEAD^ -- /foo/bar/baz.txt
HEAD^부모는 이전에 커밋하지, 커밋한다pull
HEAD병합 커밋이고, HEAD^최초의 부모가 그래서 그래, 그것은이되기 전에 커밋 될 수 커밋이다 pull. 다른 부모를 가져 오려면 (양방향 병합의 경우)을 사용 HEAD^2합니다. 그러나, 위의 대답은 정말 그렇게 -1 ;-) 떠나, 처음에 질문에 대답하지 않습니다
똑바로 git pull하면 '빨리 감기'되거나 원격 저장소에서 알 수없는 수의 커밋을 병합 할 수 있습니다. 이것은 하나의 작업으로 발생하므로 풀 직전에 있었던 마지막 커밋이 reflog의 마지막 항목이되고 HEAD@{1}. 이는 다음을 수행 할 수 있음을 의미합니다.
git diff HEAD@{1}
그러나 이것이 자신이 많이하는 일이라면 git fetch수동으로 병합하거나 리베이스하기 전에 a를 수행 하고 가져온 브랜치를 검사 하는 것을 고려하는 것이 좋습니다. 예를 들어 마스터에 있고 오리진 / 마스터를 가져 오려는 경우 :
git fetch
git log HEAD..origin/master
# looks good, lets merge
git merge origin/master
git log대신 사용하는 것이 좋습니다 git diff(구문이 '..'에 대한 '..' git log과 '...' 사이에 약간 불일치하더라도 git diff) +1 참조 stackoverflow.com/questions/53569/… 및 stackoverflow.com/questions / 850607 /…