GIT

ΠžΡΠ½ΠΎΠ²Ρ‹

git add

git add --all Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚ всС Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΏΠ°ΠΏΠΊΠ° ΠΈ ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠ°Ρ…

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚ всС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΡ€ΠΎΠΌΠ΅ file.cpp

git add -u

git reset -- path/file.cpp

Аналогично ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ всС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ:

git add -u

git reset -- mydir/*

Знакомство с Git Commit

Git Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ всю Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, Π° ΡƒΠΆΠΈΠΌΠ°Π΅Ρ‚ (ΠΊΠΎΠ³Π΄Π° это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ) ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Π½Π°Π±ΠΎΡ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Β«Π΄Π΅Π»ΡŒΡ‚ΡƒΒ» ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсиСй ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΎΠ½ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ вСсь Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π’Π°ΠΊΠΆΠ΅ Git Ρ…Ρ€Π°Π½ΠΈΡ‚ всю ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π±Ρ‹Π» сдСлан

git commit -m "first commit"

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ своСго родитСля(ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ), это ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ стрСлочками.

Π’Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ Π² Git(Π’Π΅Ρ‚ΠΊΠΈ Π² git)

ΠœΡ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ ΠΈ создали Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ newImage

git branch newImage

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ Π²Π΅Ρ‚ΠΊΡƒ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ

git checkout newImage

Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚

git commit

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π½Π΅Π΅

git checkout -b yourbranchname

git commit

git checkout -b bugfix

git commit

БлияниС Π²Π΅Ρ‚ΠΎΠΊ

merge

Π’ΠΎΡ‚ Ρƒ нас Π΄Π²Π΅ Π²Π΅Ρ‚ΠΊΠΈ, каТдая содСрТит ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π΅Ρ‚ΠΎΠΊ Π½Π΅ содСрТит ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ "Ρ€Π°Π±ΠΎΡ‚", Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… Π² этом Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. МоТно ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ эту ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² слияниС.

git merge bugfix

Π’Π΅Ρ‚ΠΊΠ° master Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄Π²Π° родитСля. Если ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ стрСлкам ΠΎΡ‚ этого ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π²Ρ‹ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Π΄Π΅Ρ€Π΅Π²Π΅ прямиком ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² Π²Π΅Ρ‚ΠΊΠ΅ master содСрТатся всС измСнСния рСпозитория.

git checkout bugfix

git merge master

Π’Π΅ΠΏΠ΅Ρ€ΡŒ каТдая Π²Π΅Ρ‚ΠΊΠ° содСрТит всС измСнСния рСпозитория

rebase

git rebase master

Π’Π΅ΠΏΠ΅Ρ€ΡŒ измСнСния ΠΈΠ· bugFix находятся Π² ΠΊΠΎΠ½Ρ†Π΅ Π²Π΅Ρ‚ΠΊΠΈ master ΠΈ ΡΠ²Π»ΡΡŽΡ‚ собой Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². ΠšΠΎΠΌΠΌΠΈΡ‚ Π‘3 Π΄ΠΎ сих ΠΏΠΎΡ€ сущСствуСт Π³Π΄Π΅-Ρ‚ΠΎ, Π° Π‘3' - это Π΅Π³ΠΎ "копия" Π² Π²Π΅Ρ‚ΠΊΠ΅ master. ЕдинствСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° - Π²Π΅Ρ‚ΠΊΠ° master Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° Π΄ΠΎ послСдних ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

git rebase bugfix

Detached HEAD

HEAD - это символичСскоС имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° β€” это, ΠΏΠΎ сути, Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ Π² Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ. HEAD всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΈΠ· вашСго локального Π΄Π΅Ρ€Π΅Π²Π°. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ Git, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, Π½Π°Ρ‡Π½ΡƒΡ‚ с измСнСния HEAD.

git checkout C1

git checkout master

git commit

git checkout C2

ΠžΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (detaching) HEAD ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ лишь присвоСниС Π΅Π³ΠΎ Π½Π΅ Π²Π΅Ρ‚ΠΊΠ΅, Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ отдСлСния:

HEAD -> master -> C1

git checkout C1

А Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ

HEAD -> C1

ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ссылки (^)

ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ссылки - ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, Π½ΠΎ ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π΄Π²Π° простых способа использования:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π½Π°Π·Π°Π΄ ^

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° num ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½Π°Π·Π°Π΄ ~

git checkout master^

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΎΠΊ

git branch -f master HEAD~3

ΠžΡ‚ΠΌΠ΅Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² git

Π•ΡΡ‚ΡŒ Π΄Π²Π° основных способа ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Git: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ - это git reset, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ - git revert.

git reset отмСняСт измСнСния, пСрСнося ссылку Π½Π° Π²Π΅Ρ‚ΠΊΡƒ Π½Π°Π·Π°Π΄, Π½Π° Π±ΠΎΠ»Π΅Π΅ старый ΠΊΠΎΠΌΠΌΠΈΡ‚. Π­Ρ‚ΠΎ своСго Ρ€ΠΎΠ΄Π° "пСрСписываниС истории"; git reset пСрСнСсёт Π²Π΅Ρ‚ΠΊΡƒ Π½Π°Π·Π°Π΄, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² вовсС ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΎ.

git reset HEAD~1

Git просто пСрСнёс ссылку Π½Π° master ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚ C1. Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² состоянии, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ C2 Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ сущСствовал. Reset ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚ΠΊΠ°Ρ…, Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… рСпозиториях. Но этот ΠΌΠ΅Ρ‚ΠΎΠ΄ пСрСписывания истории Π½Π΅ сработаСт Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Π²Π΅Ρ‚ΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ измСнСния ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹ΠΌΠΈ измСнСниями с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git revert.

git revert HEAD

Появился Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ C2' просто содСрТит измСнСния, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Π΅ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ сдСланы Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ C2. ПослС revert ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ push ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ измСнСниями с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Cherry-pick

git cherry-pick <Commit1> <Commit2> <...>

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ простой ΠΈ прямолинСйный способ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π½Π° мСсто, Π³Π΄Π΅ сСйчас Π½Π°Ρ…ΠΎΠ΄ΠΈΡˆΡŒΡΡ (HEAD).

git cherry-pick C2 C4

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ rebase

git rebase -i HEAD~4

Rebase over 9000 Ρ€Π°Π·

Π£Π΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ

Push & Pull - ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π² Git!

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ΅ использованиС Git Remotes

Last updated

Was this helpful?