зеркало из
https://github.com/iharh/notes.git
synced 2025-10-30 13:16:07 +02:00
53 строки
1.8 KiB
Plaintext
53 строки
1.8 KiB
Plaintext
https://www.atlassian.com/git/tutorials/refs-and-the-reflog/the-reflog
|
||
|
||
|
||
You can also refer to commits relative to another commit.
|
||
The ~ character lets you reach parent commits.
|
||
|
||
For example, the following displays the grandparent of HEAD:
|
||
|
||
git show HEAD~2
|
||
|
||
But, when working with merge commits, things get a little more complicated.
|
||
Since merge commits have more than one parent, there is more than one path that you can follow.
|
||
For 3-way merges, the first parent is from the branch that you were on when you performed the merge,
|
||
and the second parent is from the branch that you passed to the git merge command.
|
||
|
||
The ~ character will always follow the first parent of a merge commit.
|
||
If you want to follow a different parent, you need to specify which one with the ^ character.
|
||
|
||
For example, if HEAD is a merge commit, the following returns the second parent of HEAD.
|
||
|
||
git show HEAD^2
|
||
|
||
You can use more than one ^ character to move more than one generation.
|
||
For instance, this displays the grandparent of HEAD (assuming it’s a merge commit) that rests on the second parent.
|
||
|
||
git show HEAD^2^1
|
||
|
||
To clarify how ~ and ^ work, the following figure shows you how to reach any commit from A using relative references.
|
||
In some cases, there are multiple ways to reach a commit.
|
||
|
||
A^2-1
|
||
A^2^1 A^2
|
||
|
||
-- O --- O --
|
||
/ \
|
||
O ---- O ---- O ----------- O
|
||
|
||
A-3 A-2 A-1 A
|
||
A^2-3 A^2-2 A^1
|
||
|
||
Relative refs can be used with the same commands that a normal ref can be used.
|
||
For example, all of the following commands use a relative reference:
|
||
|
||
# Only list commits that are parent of the second parent of a merge commit
|
||
git log HEAD^2
|
||
|
||
# Remove the last 3 commits from the current branch
|
||
git reset HEAD~3
|
||
|
||
# Interactively rebase the last 3 commits on the current branch
|
||
git rebase -i HEAD~3
|
||
|