GitNotes.43-7.md
본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

Section 43.7: 커밋 ancestry chain: <rev>^, <rev>~<n>, 등등

$ git reset --hard HEAD^ # 마지막 커밋을 무효화한다 $ git rebase --interactive HEAD~5 # 최근 4개의 커밋을 rebase 한다

접미어 ^ 를 revision 파라미터에 붙이게 되면 해당 커밋 객체의 여러 부모 중 (부모 커밋이 여럿일 경우) 첫번째 부모를 참조하게 된다. ^<n> 를 사용하게 되면 해당 커밋의 여러 부모 중 (부모 커밋이 여럿일 경우) <n>번째 부모를 참조하게 된다 (예: <rev>^ 는 <rev>^1 와 동일한 효과를 가진다).

접미어 ~<n> 를 revision 파라미터에 붙이게 되면 해당 커밋 객체의 <n> 번째 세대의 선조 (n-th generation ancestor) 인 커밋을 가리키게 되며, 이 과정 중 부모가 여럿인 경우가 나타나면 항상 첫번째 부모를 따르게 된다. 이 설명을 따른 예로써, <rev>~3 은 <rev>^^^ 와 동일하다. 각각의 단축 버전으로, <rev>~ 은 <rev>~1 을 나타내며, 또한 이는 <rev>^1 와도 동일할 뿐만 아니라, 더 짧게는 <rev>^ 로도 표현 가능하다.

이 문법들은 git 이 생성 가능하다. 이러한 symbolic 이름을 찾고자 하는 경우, git name-rev 명령을 이용할 수 있다:

$ git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a 33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99~940

아래의 예제에서는 --oneline 이 아닌 --pretty=oneline 을 사용하여야 함을 유의하라.

$ git log --pretty=oneline | git name-rev --stdin --name-only master Sixth batch of topics for 2.10 master~1 Merge branch 'ls/p4-tmp-refs' master~2 Merge branch 'js/am-call-theirs-theirs-in-fallback-3way' [...] master~14^2 sideband.c: small optimization of strbuf usage master~16^2 connect: read $GIT_SSH_COMMAND from config file [...] master~22^2~1 t7810-grep.sh: fix a whitespace inconsistency master~22^2~2 t7810-grep.sh: fix duplicated test name

[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)

반응형

+ Recent posts