Git Command

Git ¸í·É¿¡ ´ëÇÑ ÆÁÀÌ´Ù.

* ±âº»ÀûÀÎ Ä¿¹Ô°ú ÆÄÀÏ ¿Ã¸®±â

git pull --rebase origin master

//Àüü ¼öÁ¤µÈ ÆÄÀÏ ¿Ã¸®±â
git add .

git commit -m "git test"
git push


* ¸®¸ðÆ® ºê·£Ä¡ È®ÀÎ

//µî·ÏµÈ ¸®¸ðÆ® ÀúÀå¼Ò È®ÀÎ
$ git remote
origin

//-v ¿É¼ÇÀ¸·Î µî·ÏµÈ À̸§°ú ÁÖ¼Ò¸¦ È®ÀÎÇÒ¼ö ÀÖ´Ù.
$ git remote -v
origin  https://github.com/myon/javaWeb.git (fetch)
origin  https://github.com/myon/javaWeb.git (push)

//·ÎÄà ºê·£Ä¡ ¸ñ·Ï Á¶È¸
$ git branch
* main

//¸®¸ðÆ® ºê·£Ä¡ ¸ñ·Ï Á¶È¸
$ git branch -r
origin/main

//¸ðµç ºê·£Ä¡ ¸ñ·Ï Á¶È¸
$ git branch -a
* main
remotes/origin/main



* pull --reabase Ãæµ¹½Ã ÇØ°á¹æ¹ý

git pull --rebase origin master

test.cpp ÆÄÀÏ conflict ¹ß»ý
¹®Á¦ ÆÄÀÏ ¼öÁ¤ÈÄ

git add test.cpp
git rebase --continue


* ¿ø°ÝÀúÀå¼Ò¿¡ ºê·£Ä¡ »ý¼º
//master ºê·£Ä¡¿¡¼­ child ºê·£Ä¡¸¦ »õ·Î »ý¼ºÇÑ´Ù
//¶Ç´Â ´ÙÀ½°ú °°ÀÌ ÇÒ¼öµµ ÀÖ´Ù  =  git checkout -b child
git branch child master  
//¿ø°ÝÀúÀå¼Ò¿¡ Àû¿ë
git push origin child
//child ºê·£Ä¡·Î À̵¿
git checkout child
//push/pull ¸í·É½Ã ¿ø°Ý ÀúÀå¼ÒÀÇ child ºê·£Ä¡¸¦ ÀÚµ¿ ÁöÁ¤Çϵµ·Ï ¼³Á¤ÇÑ´Ù.
git branch -u origin/child

-u ¸í·ÉÀº --set-upstream-to ¸í·É°ú µ¿ÀÏÇÏ´Ù
·ÎÄà branch°¡ ¾î¶² ¿ø°Ý ºê·£Ä¡¿Í ¿¬°á µÇ¾î ÀÖ´ÂÁö º¼·Á¸é "git branch -vv" ¸í·ÉÀ» »ç¿ëÇÏ¸é µÈ´Ù.
-vv ¿É¼ÇÀ¸·Î child°¡ ¾î¶² ¸®¸ðÆ® ºê·£Ä¡¸¦ ÀÚµ¿À¸·Î Âü°í ÇÏ´ÂÁö È®ÀÎÇغ¸ÀÚ.

git branch -u »ç¿ë Àü

  child  2bfebc1 first
* master 2bfebc1 [origin/master] first

git branch -u »ç¿ë ÈÄ

* child  2bfebc1 [origin/child] first
  master 2bfebc1 [origin/master] first

* ¿ø°ÝÀúÀå¼Ò ºê·£Ä¡ »èÁ¦
//·ÎÄà child ºê·£Ä¡ »èÁ¦, Ä¿¹ÔÀÌ ³²¾Æ ÀÖ´Ù¸é -D ¿É¼ÇÀ¸·Î °­Á¦ »èÁ¦¸¦ ÇÑ´Ù.
git branch -d child
//¿ø°ÝÀúÀå¼Ò child ºê·£Ä¡ »èÁ¦
git push origin -d child

* unstaged ÆÄÀÏÀ» head ³»¿ëÀ¸·Î µÇµ¹¸®±â (svn revert ¸í·É¾î¿Í µ¿ÀÏ)
//ÀÛ¾÷ÁßÀÎ ³»¿ëÀº ³¯¶ó°¡¸ç º¹±¸´Â ºÒ°¡´ÉÇÏ´Ù

git checkout -- filenmae
//¸ðµç ÆÄÀÏ°ú Æú´õ¸¦ µÇµ¹¸°´Ù.
git checkout -- .

//"--" ¸í·ÉÀ» »ý·«ÇÏ°í ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ¼ö ÀÖ´Ù.
git checkout filenmae
git checkout .

* ·ÎÄà ÀÛ¾÷ µð·ºÅ丮¿¡¼­ Ä¿¹Ô Ãë¼Ò, Ä¿¹Ô ³»¿ëµµ °°ÀÌ Ãë¼Ò
//¸¶Áö¸· Çìµå Ä¿¹Ô Ãë¼Ò
git reset --hard HEAD^
//¸¶Áö¸· Çìµå Ä¿¹Ô Ãë¼Ò, À§¿Í µ¿ÀÏ
git reset --hard HEAD~1

//¸¶Áö¸· Çìµå Ä¿¹Ô 3°³ Ãë¼Ò
git reset --hard HEAD~3

* untracked ÆÄÀÏ Á¦°Å
git clean -fd
//À§¿Í µ¿ÀÏÇÑ ¸í·É
git clean -f -d

-f: ÆÄÀÏ Á¦°Å
-d: µð·ºÅ丮 Á¦°Å
-x: .gitignore ¸ñ·Ï¿¡ ÀÖ´Â ÆÄÀÏ Á¦°Å

* ·ÎÄÿ¡¼­ push ¾ÈµÈ ¸¶Áö¸· commit ³»¿ë ¼öÁ¤
ÄܼÖâ¿¡¼­ ÀÔ·ÂÇÏ´Â ÄÄ¸Çµå ¹æ½Ä°ú git gui·Î »ç¿ëÇÏ´Â ¹æ½Ä µÎ°¡Áö¸¦ ¾Ë¾Æ º»´Ù.

- ÄÄ¸Çµå ¹æ½Ä
¼öÁ¤µÈ ³»¿ë addÇÏ°í commit --amendÇÑ´Ù
> git add main.c
> git commit --amend

- git gui ¹æ½Ä
¿À¸¥ÂÊ ¾Æ·¡ "Amend Last Commit" üũ ¹Ú½º¸¦ ¼±ÅÃÇÏ°í "Unstaged Changes" ºä¿¡¼­ Ãß°¡ÇÒ Ä¿¹Ô ÆÄÀÏÀ» ¼±ÅÃÈÄ "Commit" ¹öÆ°À» ´©¸¥´Ù.

* git cherry-pickÀ¸·Î ƯÁ¤ Ä¿¹Ô  °¡Á®¿À±â
°³¹ß ºê·£Ä¡ÀÇ Æ¯Á¤ Ä¿¹ÔÀ» ¸¶½ºÅÍ·Î º´ÇÕÇØ º¸ÀÚ.
// °³¹ß ºê·£Ä¡¿¡¼­ Çؽ¬ È®ÀÎÀ» À§ÇØ Ä¿¹Ô ·Î±×¸¦ ÇÑÁÙ·Î º»´Ù.
$ git log --pretty=oneline
// ¸¶½ºÆ® ºê·£Ä¡·Î º¯°æÇÑ´Ù.
$ git checkout master

// °³¹ß ºê·£Ä¡ÀÇ a775840 Çؽ¬¸¦ ¸¶½ºÅÍ·Î °¡Á®¿Â´Ù.
$ git cherry-pick a775840

git cherry-pickÀº Ä¿¹ÔÀ» °¡Á®¿Â´Ù°í Ç¥ÇöÇßÁö¸¸ ¾ö¹ÐÇÏ°Ô ¸»ÇÏ¸é °¡Á®¿Ã Ä¿¹ÔÀ» »õ·Î ¸¸µé¾î¼­ ÇöÀç ºê·£Ä¡¿¡ »õ·Î¿î Ä¿¹ÔÀ» Ãß°¡ÇÑ´Ù.  °³¹ß Ä¿¹Ô ID(Çؽ¬)¿Í ¸¶½ºÅÍ Ä¿¹Ô ID°¡ ´Ù¸£´Ù.
Áï, »õ·Î¿î Ä¿¹ÔÀ» Çϴ°Ͱú °°´Ù.

* git cherry-pickÀ¸·Î ¿©·¯°³ÀÇ Çؽ¬ ü¸®ÇÈ Çϱâ
//°ø¹éÀ» ÁÖ°í Çؽ¬¸¦ Ãß°¡ÇÑ´Ù
$ git cherry-pick a775840 ab36a56
//cherry-pickÀ» °è¼ÓÇÑ´Ù.
git cherry-pick --continue
//cherry-pick ÀÛ¾÷À» Áß´ÜÇÏ°í ÀÌÀü ü¸®ÇÈ ÀÛ¾÷µµ Ãë¼Ò°¡ µÈ´Ù.
git cherry-pick --abort

ÂüÁ¶)
https://ardalis.com/clean-up-unused-git-branches
https://www.previousnext.com.au/blog/intro-cherry-picking-git

git rebase, cherry-pick, merge
https://www.tuwlab.com/ece/22218

¼öÁ¤ÇÑ°Í µÇµ¹¸®±â
http://hochulshin.com/git-revert-changes/

¸®º£À̽º
http://blog.appkr.kr/work-n-play/git-rebase/