( " " ), . , .
, . , , !
Commits, HEAD,
-, , Git - . : . 1 , , 30 , , Git , , git reset. : , Git. ( , , Mac Time Machine .) , (aka staging-area, aka cache), - , .
, () . 2 Git -only. :
- ,
git show HEAD:README ( README); - index/staging,
git show :0:README; - , , , , Git -only.
, . /: git show, git add. git add README, , : .
(aka HEAD) . . , ( , ).
1 , - , , . , - , Git ... ? 🤔 , , .
2 , . - , ( , ), . , , , . .
( , ), , . , , - master feature/tall, , HEAD. . - , , , , , , -, :
... <-parent <-tip <--branch(HEAD)
o , , commits , , , , , - :
...--o--o--o <-- branch (HEAD)
, .
git commit
, git commit, Git:
, , master, :
A
commit D, C, master , D:
A
, , , , . . master , , , HEAD , . , HEAD.
git reset, . git reset, git reset HEAD~1.
git reset HEAD
git reset - -, . HEAD : , , HEAD, , . ~1 . , HEAD master master D, D C.
, , master, . ? : (). :
D [no name - abandoned]
/
A--B--C <-- master (HEAD)
master, commit C, B, A ( , , ). D, ; 30 , , - , , - .
git reset
git reset , master. reset. , git reset HEAD~1, commit D, commit D . git reset HEAD~1 commit C. , git reset ! Git Git - HEAD (, , Git -only).
git reset , --soft. , commit D ( , C - , , , ).
git reset ,
, git reset . : git reset .
git reset , --hard. , Git , . Git - , commit C, .
: git reset ;
git reset ( !), ) , , :
- .
--soft, . - .
--mixed , . - -,
--hard, ( ) 2.
, , , 1, --soft: ; 2, --mixed/ : .
git add -p git reset -p
, git add . , , ? , , , , , , :
$ cp README README.save
$ vim README
$ git add README
, , :
$ mv README.save README
$ git commit
. git add -p .
, git add -p , , . , "diff hunk", Git hunk , . , Git , ( ) . , -, . . ( , .
git reset -p, diff, HEAD. , HEAD.
-
Git : - - , . git show , .
, : , , Git . , , .
, git cherry-pick, , , , HEAD . 3 , : Git .
3 Git , , , . , , , --theirs commit HEAD --ours.
Rebase = reset +
Rebasing in Git, , git reset --hard, . 4 Git " HEAD" ", () , , , rebase :
:
D
/
...
D F. ( , Git , rebase .)
Reset ( ) , , , C. reset git reset --hard: .
- , . , .
, , HEAD . ( rebase ORIG_HEAD, ):
D--E--F [ORIG_HEAD]
/
...--o--A--B--C <-- mainline
\
D'-E'-F' <-- feature (HEAD)
' , .
2. pick Git , . pick edit, Git , . pick reword, Git --edit, . ( ), ; , pick. , - - .
4 rebase git cherry-pick, - . . , git apply -3 , . .
git commit --amend
:
A
, git add git commit, Git commit D C master D:
A
, , git commit , C, C , git commit --amend. , , commit D, commit B:
C [abandoned]
/
A--B--D <-- master (HEAD)
Git , , , , D, B, A. - commit C commit D, .
, , , rebase.
rebase
, :
...--F--G--H--I <-- branch (HEAD)
- commit G, , - . commit F , commit F, git rebase -i.
, F, HEAD~3, ~3 : I (0), H (1), G (2), F (3). , :
git rebase -i HEAD~3
pick, G, H, I F, :
F
/
...
, , pick edit, Git , , :
F
/
...
( " HEAD" ). commit F'.
- - , , F', git reset -p . git reset --mixed HEAD~1, F' , git add -p. , , F', .
, F' , git reset -p. . git commit --amend, , F'', F F', , . --amend git commit, F'' parent, E, F':
F
/
...
\
F' [abandoned]
, , F', git reset --mixed:
F
/
...
\
F' [abandoned]
git add -p . , git commit ( --amend) commit F'':
F
/
...
\
F' [abandoned]
git add, . , commit I, :
F
/
...
\
F' [abandoned]
git rebase --continue, Git - G G' H H':
F--G--H <-- branch
/
...--E--F''-I-G'-H' <-- HEAD
\
F' [abandoned]
, , Git , :
F--G--H [ORIG_HEAD]
/
...--E--F''-I-G'-H' <-- branch (HEAD)
\
F' [abandoned]
.