我很难理解git是怎么工作的,谁是父母,谁是祖父母。另外,Git中的^和〜有何区别。
* 9ec05ca (HEAD -> master) Revert "Set page heading to "Quests & Crusades""
* db7e87a Set page heading to "Quests & Crusades"
* 796ddb0 Merge branch 'heading-update'
|\
| * 4c9749e (heading-update) Set page heading to "Crusade"
* | 0c5975a Set page heading to "Quest"
|/
* 1a56a81 Merge branch 'sidebar'
|\
| * f69811c (sidebar) Update sidebar with favorite movie
| * e6c65a6 Add new sidebar content
* | e014d91 (footer) Add links to social media
* | 209752a Improve site heading for SEO
* | 3772ab1 Set background color for page
|/
* 5bfe5e7 Add starting HTML structure
* 6fa5f34 Add .gitignore file
* a879849 Add header to blog
* 94de470 Initial commit
该如何回答?
您在最后一个方面做得很好,为什么不去尝试一下呢!使用同一存储库,HEAD〜4 ^ 2引用哪个提交?
答案 0 :(得分:1)
我很难理解git是怎么工作的,谁是父母,谁是祖父母。另外,Git中的^和〜有何区别。
要记住的第一件事是^
仅指父母,而~
指祖先。 COMMIT^2
指提交的第二个父级,而COMMIT~2
指第二个祖先。
git中的简单提交只有一个父提交,而合并提交至少有两个父提交。因此,在您的示例中,提交796ddb0
有两个父母:
* 9ec05ca (HEAD -> master) Revert "Set page heading to "Quests & Crusades""
* db7e87a Set page heading to "Quests & Crusades"
* 796ddb0 Merge branch 'heading-update'
|\
THIS IS PARENT #2 --> | * 4c9749e (heading-update) Set page heading to "Crusade"
THIS IS PARENT #1 --> * | 0c5975a Set page heading to "Quest"
796ddb0^1
指的是0c5975a
,因为我们算起父母从
左边。 796ddb0^2
指4c9749e
。
祖先是指定提交与存储库根目录之间路径上的任何提交,如果提交有多个父级,则始终跟随第一个父级。因此,如果我们在示例的第一部分中标记HEAD
的祖先,我们将得到以下结果:
* 9ec05ca (HEAD -> master) Revert "Set page heading to "Quests & Crusades""
HEAD~1 * db7e87a Set page heading to "Quests & Crusades"
HEAD~2 * 796ddb0 Merge branch 'heading-update'
|\
| * 4c9749e (heading-update) Set page heading to "Crusade"
HEAD~3 * | 0c5975a Set page heading to "Quest"
|/
HEAD~4 * 1a56a81 Merge branch 'sidebar'
我们可以将HEAD~4^2
分为两个操作:
HEAD~4
是指提交1a56a81
。那是一个合并提交
两个父母,所以... 1a56a81^2
是指f69811c