CLI ํ๊ฒฝ์์ Git ์ฌ์ฉํ๊ธฐ(๋ช ๋ น์ด ์ ๋ฆฌ) #2
๐ ๋ชฉ๋ก
stash
merge
rebase
pull request
show
reset
cherry-pick
stash
- stash ๋ป: (์์ ํ ๊ณณ์) ๋ฃ์ด ๋๋ค.
- ์์ ํ๋ ๋ด์ฉ(commit ํ๊ธฐ ์ ์ modified, staged ์ํ์ ํ์ผ๋ค)์ ์์ ์ ์ฅ
- ๋ธ๋์น์์ ์์ ํ๋ค๊ฐ ๋ค๋ฅธ ๋ธ๋์น๋ก ๋ณ๊ฒฝํด์ผ ํ๋๋ฐ ์ปค๋ฐ์ ํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ ์ฌ์ฉ
- stack์ฒ๋ผ ์๋(stash, pop)
stash ์ฌ์ฉ ๋ฐฉ๋ฒ
git stash
ํ์ฌ ์์ ํ๋ ํ์ผ์ ์์ ์ ์ฅ
์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ ์ํ์์ status๋ก ํ์ธํด๋ณด๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด commit์ ํ์ง ์์์ง๋ง working tree clean ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ค.
stash๋ก ์์ ์ ์ฅ๋ ๋ชฉ๋ก ํ์ธ
git stash list
์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
$ git stash list
stash@{0}: WIP on master: 3fb7854 cherry pick test
stash ๋ช ๋ น์ด๋ก ์์ ์ ์ฅํ ๋ ๋ง๋ค {}์ด 1์ฉ ์ฆ๊ฐํ๋ค.
๊ฐ์ฅ ๋ง์ง๋ง์ ์์ ์ ์ฅํ ๊ฒ์ ๊ฐ์ ธ์ค๊ธฐ
git stash pop
ํน์ ์์ ์ ์ฅ ๊ฐ์ ธ์ค๊ธฐ
git stash apply <ํค๊ฐ>
<ํค๊ฐ>์ stash list์ ๋ณด์ฌ์ง๋ {} ์์ ์ ์๋ฅผ ์ ๋ ฅํ๋ค.
stash๋ก ์์ ์ ์ฅํ ๊ฒ ๋ค ๋ชจ๋ ๋ ๋ฆฌ๊ธฐ(์ญ์ )
git stash drop
merge
ํ์ ์ ํต์ฌ. ํ์ฌ ๋ธ๋์น์ ๋ค๋ฅธ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ํฉ์นจ
merge์ 3๊ฐ์ง ๋์ ๋ฐฉ์
โ๏ธ fast-forward: ๊ธฐ์ค ๋ธ๋์น๋ ๋ณ๊ฒฝ์ด ์๊ณ merge ๋์ ๋ธ๋์น๋ง ๋ณ๊ฒฝ๋์ ๊ฒฝ์ฐ. ๋จ์ํ HEAD๋ง ์ฎ๊ฒจ์ง
โ๏ธ 3-way merge: ๊ธฐ์ค ๋ธ๋์น์ merge ๋์ ๋ธ๋์น๊ฐ ๋ ๋ค ๋ณ๊ฒฝ๋์ ๊ฒฝ์ฐ. ๋ ๊ฐ๋๋ก ๋์จ ๋ณ๊ฒฝ๋ค์ ํฉ์ณ์ ์๋ก์ด ์ปค๋ฐ์ ๋ง๋ฆ. = merge ์ปค๋ฐ
โ๏ธ squash: ๋์ ๋ธ๋์น์ ์ปค๋ฐ๋ค์ ํ๋์ ์ปค๋ฐ์ผ๋ก ํฉ์นจ
merge ์ฌ์ฉ ๋ฐฉ๋ฒ
git merge <๋ธ๋์น ์ด๋ฆ>
ํ์ฌ ๋ธ๋์น์ ๋ก์ปฌ์ <๋ธ๋์น ์ด๋ฆ>์ ๋ณ๊ฒฝ ์ฌํญ์ ํฉ์น๋ค.
git merge <๋ฆฌ๋ชจํธ ์ ์ฅ์ ์ด๋ฆ>/<๋ธ๋์น ์ด๋ฆ>
ํ์ฌ ๋ธ๋์น์ <๋ฆฌ๋ชจํธ ์ ์ฅ์ ์ด๋ฆ>์ <๋ธ๋์น ์ด๋ฆ>์ ๋ณ๊ฒฝ ์ฌํญ์ ํฉ์น๋ค.
๐จ ๋ฆฌ๋ชจํธ ์ ์ฅ์์ ๋ธ๋์น์ mergeํ ๋ ์ฃผ์ ์ฌํญ
merge ๊ธฐ์ค์ด ๋๋ ๋ก์ปฌ ๋ธ๋์น๋ฅผ pull ๋๋ fetch๋ฅผ ํตํด ์ต์ ํ ์ํจ ํ mergeํด์ผ ํ๋ค.
๐ ํ์ฌ ๋ธ๋์น๋ git branch ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์์ผ๋ฉฐ ๋ธ๋์น ๋ณ๊ฒฝ์ git checkout <๋ธ๋์น ์ด๋ฆ>์ผ๋ก ํ ์ ์๋ค.
rebase
- merge์ ๋น์ทํ๊ฒ ๋ค๋ฅธ ๋ธ๋์น์ ๋ณํฉํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ค.
- ์ปค๋ฐ ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ ํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ค.
1) rebase ์ฌ์ฉ ๋ฐฉ๋ฒ - ๋ค๋ฅธ ๋ธ๋์น์ ๋ณํฉ
git rebase <๋ธ๋์น ์ด๋ฆ>
- ๊ธฐ๋ฅ์ ์ผ๋ก๋ merge์ ๋์ผ
- ๋ด ๋ธ๋์น์ ์ปค๋ฐ์ ๋์ ๋ธ๋์น์ ์(๋ค์)์ผ๋ก ์์ฑํจ
- ๊น๋ํ ๋ก๊ทธ๋ฅผ ์ ์งํ ์ ์์
2) rebase ์ฌ์ฉ ๋ฐฉ๋ฒ - ์ปค๋ฐ ์์
- ๐จ ์ฃผ์
- push ํด์ ๋๊ตฐ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์ปค๋ฐ์ rebase ํ๋ฉด ์๋จ
- ํด๋น ์ปค๋ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ ํ์ ํ ๋ฐ ๊ทธ ๊ธฐ๋ฐ์ ๋ฐ๊ฟ ๋ฒ๋ฆฌ๋ ๊ฒ
- push๋ฅผ ํ๋๋ผ๋ ์์ง merge๋์ง ์์๊ณ ๋ค๋ฅธ ์ฌ๋์ด ์ฌ์ฉํ์ง ์๋ ๋ธ๋์น๋ผ๋ฉด (feature ๋ธ๋์น ๋ฑ) ๋ง์๋๋ก rebase๋ฅผ ํด๋ ๋ฌด๋ฐฉ
- -i: ๋ํํ ๋ชจ๋
- ์ปค๋ฐ ๋ชฉ๋ก์์์ ์ต์
- p, pick = use commit
- r, reword = use commit, but edit the commit message
- e, edit = use commit, but stop for amending
- s, squash = use commit, but meld into previous commit
- f, fixup = like "squash", but discard this commit's log message
- x, exec = run command (the rest of the line) using shell
rebase ๋ช ๋ น์ด์ -i, f(fixup) ์ต์ ์ ์ฌ์ฉํด์ ๋ค์ ์ธ ๊ฐ์ ์ปค๋ฐ(b6b6519, 914aae1, 9454338)์ ํ๋์ ์ปค๋ฐ์ผ๋ก ํฉ์ณ๋ณด์.
$ git lg
* b6b6519 - (2์ด ์ ) commit 3 - Yoon (HEAD -> master)
* 914aae1 - (10์ด ์ ) commit 2 - Yoon
* 9454338 - (22์ด ์ ) commit 1 - Yoon
git rebase -i @~3
rebase ๋ช ๋ น์ด๋ฅผ ๋ํํ ๋ชจ๋(-i)๋ก ์คํํ๊ณ ์ต๊ทผ 3๊ฐ ์ปค๋ฐ์ ์์ ํ๋ค(@~3)๋ ์ธ์๋ฅผ ์ง์ ํ๋ค.
@๋ HEAD์ ๋์ผํ๋ค.
์ฆ ์ ๋ช ๋ น์ด๋ git rebase -i HEAD~3๊ณผ ๊ฐ์ด ์ ๋ ฅํ ๊ฒ๊ณผ ๋์ผํ๋ค.
์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ํธ์ง๊ธฐ๋ก ์ด๋ฆฐ๋ค.
pick 9454338 commit 1
pick 914aae1 commit 2
pick b6b6519 commit 3
# Rebase 3fb7854..b6b6519 onto 3fb7854 (3 commands)
...
๊ฐ ์ปค๋ฐ์ ๋งจ ์์ pick์ 'f'๋ก ๋ณ๊ฒฝํ๊ณ ์ ์ฅํ๋ค.
pick 9454338 commit 1
f 914aae1 commit 2
f b6b6519 commit 3
# Rebase 3fb7854..b6b6519 onto 3fb7854 (3 commands)
๋ค์ git log๋ฅผ ๋ณด๋ฉด commit 1๋ง ๋จ๊ณ commit 2, 3์ ์์ด์ง ๊ฒ์ ํ์ธํ ์ ์๋ค.
$ git lg
* 8d7da7f - (5๋ถ ์ ) commit 1 - Yoon (HEAD -> master)
3) rebase ์ถฉ๋ ์ฒ๋ฆฌ
rebase๋ฅผ ์ฌ์ฉํด์ ์๋ merge ์ค ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๋ค์ ์ธ ๊ฐ์ง ์ต์ ์ ํตํด ์ฒ๋ฆฌํ ์ ์๋ค.
- --abort : rebase๋ฅผ ์ค๋จ. ์๋ ์ํ(rebase ๋ช ๋ น์ด ์ ๋ ฅ ์ด์ )๋ก ๋์๊ฐ
- --continue : rebase๋ฅผ ๊ณ์ ์งํ. ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ
- --skip : ๋์ ๋ธ๋์น์ ๋ด์ฉ์ผ๋ก ์ ์ฉ
์ถฉ๋๋ ํ์ผ์ ์์ ํ๊ณ ํด๋น ํ์ผ์ add ํ --continue๋ฅผ ํด์ผ ํ๋ค.
์ฆ, ๋ค์ ์์๋ก ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค.
git add <์ถฉ๋ ํ์ผ>
git rebase --continue
pull request
- GitHub ์ ๊ณต ๊ธฐ๋ฅ
- ์ค๋ฌด์์ ์ฝ๋ ๋ฆฌ๋ทฐ, ์ฝ๋ ์ ์ ๋ถ์ ๋ฑ์ ํ๊ณ ๋ ๋ค mergeํ๊ธฐ ์ํด ์ฌ์ฉ
1) pull request ์ฌ์ฉ ๋ฐฉ๋ฒ
๋ธ๋์น๋ฅผ ์๋ก ๋ฐ์ ์์ ํ push๊น์ง ํ๊ณ ๋์ GitHub ์ ์ฅ์์ ๊ฐ๋ณด๋ฉด ์๋์ ๊ฐ์ ๋ฒํผ์ด ํ์ฑํ๋๋ค.
Compare & pull request๋ฅผ ํด๋ฆญํ๋ค.
Create pull request๋ฅผ ํด๋ฆญํ๋ค.
pull request๋ฅผ ์์ฑํ๊ณ ๋๋ฉด ์ ์ฅ์์ Pull requestsํญ์ ์ซ์๊ฐ ๊ฐฑ์ ๋๋ค.
์ด ํ๋ฉด์์ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฑ์ ์งํํ๊ณ ์ต์ข ์ ์ผ๋ก master ๋ธ๋์น์ mergeํ๋ ค๋ฉด Merge pull request๋ฅผ ํด๋ฆญํ๋ค.
2) pull request ์ถฉ๋ ์ฒ๋ฆฌ
์์ฑ๋ pull request์ ๋ณ๊ฒฝ ์ฌํญ์ด master ๋ธ๋์น์ ์ถฉ๋์ด ๋์ ์๋ merge๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค.
GitHub์์ Resolve conflicts ๊ธฐ๋ฅ์ ์ง์ํ์ง๋ง ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์ ์ด๋ฐ ๊ฒฝ์ฐ ๋ก์ปฌ๋ก ๋์์์ IDE๋ก ์ฝ๋๋ฅผ ํธ์งํ ๋ค git merge ๋๋ rebase๋ฅผ ์ฌ์ฉํด์ ์ถฉ๋์ ์ฒ๋ฆฌํ๊ณ ๋ธ๋์น๋ฅผ ๋ค์ push ํ๋ค.
show
์ปค๋ฐ ์ ๋ณด ๋ณด๊ธฐ
HEAD ์ปค๋ฐ ๋ณด๊ธฐ
git show HEAD
git show @
HEAD์ @๋ ๊ฐ๋ค.
HEAD ๊ธฐ์ค ํ ์ปค๋ฐ ์ด์ ๋ณด๊ธฐ
git show HEAD~
git show HEAD^
git show @~
git show @^
๋ค ๊ฐ์ ๋ช ๋ น์ด๋ ๋ชจ๋ ๊ฐ๋ค.
HEAD ๊ธฐ์ค 3 ์ปค๋ฐ ์ด์ ๋ณด๊ธฐ
git show @~3
reset
1. ์ํ๋ฅผ ์ด์ ์ปค๋ฐ์ผ๋ก reset ์ํด
์ต์ ์ ๋ฐ๋ผ์ ๋ช ์ปค๋ฐ ์ด์ / ์ด๋ ๋จ๊ณ(Staged, Modified, Unmodified)๊น์ง reset ํ ์ง๋ฅผ ๊ฒฐ์
2. add(Staged) ๋ช ๋ น ์ทจ์
์ต์
โ๏ธ --soft: commit๋ง ๋๋๋ฆผ (Staged ์ํ๊ฐ ๋จ)
โ๏ธ --mixed(๊ธฐ๋ณธ๊ฐ): commit, add๊น์ง ๋๋๋ฆผ (Modified ์ํ๊ฐ ๋จ)
โ๏ธ --hard: commit, add, ์ํน ๋๋ ํ ๋ฆฌ๊น์ง ๋๋๋ฆผ (Unmodified ์ํ๊ฐ ๋จ)
--hard ์ต์ ์ ์ฌ์ฉํด์ resetํ๋ฉด git ์์ฒด์ ์ผ๋ก๋ ๋ณต๊ตฌํ ์ ์๊ธฐ ๋๋ฌธ์ ํผ์ ์ฐ๋ ๋ธ๋์น์์๋ง ์ฌ์ฉํ๋๋ก ํ๋ค.
HEAD ๊ธฐ์ค ํ ์ปค๋ฐ ๋๋๋ฆฌ๊ธฐ
git reset --soft @^
--soft ์ต์ ์ ์ฌ์ฉํ์ผ๋ฏ๋ก ๋๋๋ฆฐ ์ปค๋ฐ์ ํ์ผ๋ค์ ๋ค์ staged ์ํ๊ฐ ๋๋ค.
HEAD ๊ธฐ์ค ์ธ ์ปค๋ฐ ๋๋๋ฆฌ๊ธฐ
git reset @~3
์ต์ ์ ์ง์ ํ์ง ์์์ผ๋ฏ๋ก --mixed๊ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ๋์ด ๋๋๋ฆฐ ์ปค๋ฐ์ ํ์ผ๋ค์ modified ์ํ๊ฐ ๋๋ค.
add ๋ช ๋ น ์ทจ์ํ๊ธฐ
git reset @ <ํ์ผ๋ช
>
git reset HEAD <ํ์ผ๋ช
>
git reset @ ๋๋ git reset HEAD ๋ช ๋ น์ผ๋ก add๋ฅผ ์ทจ์ํ ์ ์๋ค.
์ฆ add ๋ช ๋ น์ผ๋ก ์ธํด staged ์ํ๊ฐ ๋ ํ์ผ์ unstagedํ ์ํ๋ก ๋๋๋ฆฐ๋ค.
cherry-pick
๋ค๋ฅธ ๋ธ๋์น์ ์ปค๋ฐ์ ํ์ฌ ๋ธ๋์น๋ก ๊ฐ์ ธ์ด
git cherry-pick <์ปค๋ฐ ํด์๊ฐ>
cherry-pick์ ์๋ชป๋ ๋ธ๋์น์์ ์์ ํ ์ปค๋ฐ๊น์ง ํ์์ ๋, ์๋ ์์ ํด์ผํ ๋ธ๋์น์์ ํด๋น ์ปค๋ฐ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
cherry-pick์ ์ปค๋ฐ์ ๊ฐ์ ธ์ค๊ธฐ๋ง ํ ๋ฟ ์๋ ๋ธ๋์น์์ ์ปค๋ฐ reset์ ํ์ง ์๋๋ค.
Related
References
'EnvironmentยทTool' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CLI ํ๊ฒฝ์์ Git ์ฌ์ฉํ๊ธฐ(๋ช ๋ น์ด ์ ๋ฆฌ) #1 (57) | 2020.08.05 |
---|---|
IntelliJ JAVA ์น ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ ๋ฐฉ๋ฒ (+ Maven, Tomcat) (0) | 2020.04.07 |
IntelliJ ํฐ์บฃ ๋ก๊ทธ ํ๊ธ ๊นจ์ง์ ํด๊ฒฐํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ (2) | 2020.04.07 |
[Mac OS] Docker๋ฅผ ์ด์ฉํด์ PostgreSQL ์ปจํ ์ด๋ ์คํํ๊ธฐ (57) | 2020.04.06 |
๋งฅ CLT(Command Line Tools) ์ค์น ๋ฐฉ๋ฒ(Xcode ์์ด) (2) | 2020.03.29 |
๋๊ธ