Git“先例参考”

时间:2018-12-17 18:20:06

标签: git

我很难理解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引用哪个提交?

1 个答案:

答案 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^24c9749e

祖先

祖先是指定提交与存储库根目录之间路径上的任何提交,如果提交有多个父级,则始终跟随第一个父级。因此,如果我们在示例的第一部分中标记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