CLI ํ๊ฒฝ์์ Git ์ฌ์ฉํ๊ธฐ(๋ช ๋ น์ด ์ ๋ฆฌ) #1
๐ ๋ชฉ๋ก
status
log
add
commit
branch
checkout
push
pull
fetch
status
- ํ์ฌ git ์ํ๋ฅผ ๋ณด์ฌ์ค
- ๋ค์ 4๊ฐ์ง๋ก ๊ตฌ๋ถ๋์ด ์ถ๋ ฅ๋จ
1) Untracked files
2) Changes to be committed
3) Changes not staged for commit
4) Nothing to commit, working tree clean
1) Untracked files
- Untracked ์ํ์ ํ์ผ๋ค
- Git์ ์ํด ๊ด๋ฆฌ๋์ง ์๋ ํ์ผ๋ค
- add ๋ช ๋ น์ด๊ฐ ์ ์ฉ๋๊ธฐ ์ ์ ํ์ผ๋ค
- ex) ์ ๊ท ํ์ผ
2) Changes to be committed
- Staged ์ํ์ ํ์ผ๋ค
- Untracked/Modified ์ํ์์ add ๋ช ๋ น์ด๋ฅผ ํตํด Staged ์ํ๊ฐ ๋ ํ์ผ๋ค
- commitํ ์ค๋น๊ฐ ๋ ํ์ผ๋ค
3) Changes not staged for commit
- Modified ์ํ์ ํ์ผ๋ค
- Unmodified ์ํ์์ ํ์ผ ์์ ์ ํตํด Modified ์ํ๊ฐ ๋ ํ์ผ๋ค
- ์ด ์ํ์ ํ์ผ๋ค์ commitํ๊ธฐ ์ํด์๋ add ํ์
4) Nothing to commit, working tree clean
- ๋ชจ๋ ํ์ผ์ด Unmodified ์ํ์ผ ๋
- commitํ ๊ฒ์ด ์๊ณ ์์ ๊ณต๊ฐ์ด cleanํ ์ํ
log
- ํ์คํ ๋ฆฌ๋ฅผ ์กฐํํ๋ ๋ช ๋ น์ด
- ์ปค๋ฐ ๋จ์๋ก ํ์คํ ๋ฆฌ๊ฐ ์์
- log๋ฅผ ๋ณผ ์ค ์์์ผ develop, release, hotfix ๋ธ๋์น๊ฐ ๋๋ฌดํ ๋ merge ๋ฐฉํฅ์ด๋ ์์๋ฅผ ์ดํดํ ์ ์์
- ์์ ์๋ ๊ฒ์ด ์ต์ , ์๋ ์์ ์๋ก ์์ ์ปค๋ฐ
git log ๋ช ๋ น์ด๋ ๋ค์ alias ์ค์ ์ ์ฌ์ฉํด์ ๋ ๋ณด๊ธฐ ํธํ๊ฒ ์ถ๋ ฅ๋๋๋ก ํ ์ ์๋ค.
git config --global alias.lg "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"
์ผ๋ฐ git log ๊ฒฐ๊ณผ
$ git log
commit 3fb7854e925c0efc1509f033fe007cbfd50d3efb (HEAD -> master)
Author: Yoon <leicareddot@gmail.com>
Date: Tue Aug 4 05:20:09 2020 +0900
cherry pick test
commit e7b33dd2a82253c9c332409dd4fd6192388659f6 (origin/master)
Merge: f2f8d58 09dc9fe
Author: leicareddot <61109222+leicareddot@users.noreply.github.com>
Date: Tue Aug 4 05:01:37 2020 +0900
Merge pull request #2 from leicareddot/feature/e
feature pr conflict
commit 09dc9fe848f057395fee513ff068e3d295081c62 (origin/feature/e, feature/e)
Author: Yoon <leicareddot@gmail.com>
Date: Tue Aug 4 04:53:19 2020 +0900
feature pr conflict
...
alias ์ฌ์ฉ
$ git lg
* 3fb7854 - (21์๊ฐ ์ ) cherry pick test - Yoon (HEAD -> master)
* e7b33dd - (21์๊ฐ ์ ) Merge pull request #2 from leicareddot/feature/e - leicareddot (origin/master)
|\
| * 09dc9fe - (22์๊ฐ ์ ) feature pr conflict - Yoon (origin/feature/e, feature/e)
|/
* f2f8d58 - (22์๊ฐ ์ ) master pr conflict - Yoon
* ab2685b - (22์๊ฐ ์ ) Merge pull request #1 from leicareddot/feature/d - leicareddot
...
add
- ํ์ผ์ Staged ์ํ๋ก ๋ง๋ฆ -> ํ์ผ์ Git์ด ๊ด๋ฆฌํ๋ ์ํ๋ก ๋ง๋ฆ
- Untracked / Modified ์ํ์ ํ์ผ์ ์ฌ์ฉํ ์ ์์
- Staged ์ํ์ ํ์ผ๋ง commit ๊ฐ๋ฅ
commit
- ํ์ผ์ Staged ์ํ์์ Unmodified ์ํ๋ก ๋ง๋ฆ -> ํ ๋จ์์ ์์ ์ด ์๋ฃ
- Git ์์คํ ์ ์๊ตฌ์ ์ผ๋ก ๋ณ๊ฒฝ์ ์ ์ฅ
- SHA-1 ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ ํด์๊ฐ์ ํค๋ก ์์ฑ
- ํ์คํ ๋ฆฌ๊ฐ ํ๋ ์ถ๊ฐ๋จ(git log)
- ์ค๋ฌด์์ ํ ์์ (๊ธฐ๋ฅ, ํผ์ฒ) ๋จ์๋ก ํ ์ปค๋ฐ ๊ถ์ฅ
์์ฃผ ์ฌ์ฉํ๋ commit ์ต์
- -m : commit ๋ฉ์์ง ์ค์
- -a : modified ์ํ์ ํ์ผ๋ค์ ๋ํด add์ commit์ ๋์์ ํจ
๊ธฐ๋ณธ์ ์ผ๋ก ํ์ผ์ ์์ ํ ๋ ๋ง๋ค commitํ๋ ค๋ฉด add๋ฅผ ๋ฐ๋์ ๊ฑฐ์ณ์ผ ํ๋๋ฐ -a ์ต์ ์ ํตํด ์ด๋ฌํ ๋ฒ๊ฑฐ๋ก์์ ์ค์ผ ์ ์๋ค.
- -am : -a์ -m์ ํฉ์น ๊ฒ. ์ ์ผ ๋ง์ด ์ฌ์ฉ โญ๏ธ
git commit -am "Commit message..."
- --amend
- amend๋ '๊ณ ์น๋ค'๋ผ๋ ๋ป
- ๋ง์ง๋ง ์ปค๋ฐ์ ์์ ํ ์ ์๋ ์ต์ . ์ข ์ข ์ ์ฉํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
- ํ์ฌ Stage ์ํ์ ํ์ผ๋ค์ด ๋ง์ง๋ง ์ปค๋ฐ๊ณผ ํฉ์ณ์ ๋ค์ ์ปค๋ฐ๋จ(๋ฐ๋ผ์ ์ปค๋ฐ์ ํด์๊ฐ๋ ๋ฐ๋)
- ๋ง์ฝ Stage์ ์๋ฌด๊ฒ๋ ์๋ค๋ฉด (commit์ดํ์ ์์ ์ ์ํ์ผ๋ฉด) ์ปค๋ฐ ๋ฉ์์ง๋ง ์์
branch
- ํ๋์ '์์ ๊ณต๊ฐ'์ผ๋ก ์ดํดํ๋ฉด ์ฌ์
- ์ปค๋ฐ ์ฌ์ด๋ฅผ ๊ฐ๋ณ๊ฒ ์ด๋ํ ์ ์๋ ์ด๋ค ํฌ์ธํฐ ๊ฐ์ ๊ฒ
1) ๋ธ๋์น ํ์ธ
git br
๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ธ๋์น ๋ชฉ๋ก์ ํ์ธํ ์ ์๋๋ฐ, *์ด ๋ถ์ ๋ธ๋์น๊ฐ ํ์ฌ ์์ ์ค์ธ ๋ธ๋์น์ด๋ค.
develop
feature/d
feature/e
* master
git br -r
-r ์ต์ ์ ์ฌ์ฉํ๋ฉด ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น ๋ชฉ๋ก์ ํ์ธํ ์ ์๋ค.
2) ๋ธ๋์น ์์ฑ
git br {๋ธ๋์น ๋ช
}
3) ๋ก์ปฌ ๋ธ๋์น ์ญ์
๋ก์ปฌ ๋ธ๋์น๋ฅผ ์ญ์ ํ๊ธฐ ์ํด -d, -D ์ต์ ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ ์ต์ ์๋ ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค.
git br -D {๋ธ๋์น ๋ช
}
-d --force์ ๋จ์ถ ๋ช ๋ น
merge ์ฌ๋ถ์ ์๊ด ์์ด ๊ฐ์ ๋ก(force) ๋ธ๋์น๋ฅผ ์ญ์ ํ๋ค.
git br -d {๋ธ๋์น ๋ช
}
--delete์ ๋จ์ถ ๋ช ๋ น
์ปค๋ฐ ๋ฐ์ ํ ์๊ฒฉ ์ ์ฅ์์ ๋จธ์ง๊ฐ ๋์ง ์์ ์ํ์ด๋ฉด error: The branch ... is not fully merged ์๋ฌ ๋ฉ์์ง์ ํจ๊ป ์ญ์ ๊ฐ ์คํจํจ
4) ์๊ฒฉ ๋ธ๋์น ์ญ์
์๊ฒฉ ๋ธ๋์น๋ฅผ ์ญ์ ํ ๋๋ git push ๋ช ๋ น์ด์ --delete ์ต์ ์ ์ฌ์ฉํ๋ค.
git push origin --delete {๋ธ๋์น ๋ช
}
์ด ๋ช ๋ น์ด๋ฅผ ํตํด ์๊ฒฉ ๋ธ๋์น๋ ์ญ์ ๋๋ค.
git fetch -p
์ญ์ ๋ ์๊ฒฉ ๋ธ๋์น๋ฅผ ๋ก์ปฌ์ ์ต์ข ์ ์ผ๋ก ๋ฐ์ํ๋ค.
checkout
- ๋ค๋ฅธ ๋ธ๋์น๋ก ์ด๋
- ํน์ ์ปค๋ฐ์ผ๋ก ์ด๋
1) ๋ค๋ฅธ ๋ธ๋์น๋ก ์ด๋
git checkout {๋ธ๋์น ๋ช
}
2) ํน์ ์ปค๋ฐ์ผ๋ก ์ด๋
git checkout {์ปค๋ฐ ํด์๊ฐ}
git log ๋ช ๋ น์ ํตํด ์ปค๋ฐ์ ํด์๊ฐ์ ์ ์ ์๋๋ฐ, ํด์๊ฐ์ checkout ๋ช ๋ น์ ์ธ์๋ก ์ ๋ ฅํ์ฌ ํด๋น ์ปค๋ฐ์ผ๋ก ์ด๋ํ ์ ์๋ค.
์ด ๊ธฐ๋ฅ์ ์์ ํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด์ ํ์ฌ working directory๊ฐ cleanํ ์ํ์์๋ง ์ฌ์ฉํ๋๋ก ํ๋ค.
์ด๋ํ ๊ณผ๊ฑฐ์ ์ปค๋ฐ์์ ์ ๊ท ๋ธ๋์น๋ฅผ ๋ฐ์ ๊ฐ๋ฐ์ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
3) checkout -b ์ต์
๋ธ๋์น ์์ฑํ๊ณ ๊ทธ ๋ธ๋์น๋ก checkout(์ด๋)ํ ์ ์๋ ์ต์
๋ฐ๋ผ์ ๋ค์ ๋ ๋ช ๋ น์ด๋ ๋์ผํจ
git co -b {๋ธ๋์น ๋ช
}
push
- ๋ก์ปฌ ๋ธ๋์น์ ์ ๋ณด๋ฅผ ์๊ฒฉ ์ ์ฅ์๋ก ์ ๋ก๋
- Clone ํ ๋ฆฌ๋ชจํธ ์ ์ฅ์์ ์ฐ๊ธฐ ๊ถํ ํ์
- ๊ฐ์ ๋ธ๋์น๋ก ์ฌ๋ฌ ๋ช ์ด ๋ฐ์์ ๋๊ตฐ๊ฐ push ํ๋ค๋ฉด ๋๋ push ํ ์ ์์
- merge / rebase ํ push ํ ์ ์์
git push [์๊ฒฉ ์ ์ฅ์ ์ด๋ฆ] [๋ธ๋์น ์ด๋ฆ]
์๊ฒฉ ์ ์ฅ์ ์ด๋ฆ๊ณผ ๋ธ๋์น ์ด๋ฆ์ ์๋ตํ ์ ์์ผ๋ฉฐ ์๋ต ์ origin, master๊ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ค.
๐ ์๊ฒฉ ์ ์ฅ์ ์ด๋ฆ์ git remote ๋ช ๋ น์ ํตํด ํ์ธํ ์ ์๋ค.
push -f ์ต์
- push --force์ ๋จ์ถ
- ๋ด ๋ก์ปฌ ๋ธ๋์น๋ก ์๊ฒฉ ๋ธ๋์น๋ฅผ ๊ฐ์ ๋ก ๋ฎ์ด์์ - ๐จ ์ฃผ์ํด์ ์ฌ์ฉ!
- ํผ์ ์ฌ์ฉํ๋ ๋ธ๋์น์์๋ง(feature ๋ธ๋์น ๋ฑ) ์ฌ์ฉํด์ผํจ
push --set-upstream ์ต์
git push --set-upstream [์๊ฒฉ ์ ์ฅ์ ์ด๋ฆ] [๋ธ๋์น ์ด๋ฆ]
push ์ fatal: The current branch ... has no upstream branch ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋๋ฐ, ์ด๋ ์๊ฒฉ ์ ์ฅ์์ pushํ๋ ค๋ ๋ธ๋์น๊ฐ ์๋ค๋ ๋ฉ์์ง์ด๋ค.
์ด๋ด ๋๋ push --set-upstream ์ต์ ์ ์ฌ์ฉํด์ ์๊ฒฉ ์ ์ฅ์ ์ด๋ฆ๊ณผ ๋ธ๋์น ์ด๋ฆ์ ๋ช ์ํ๋ฉด ์ ์์ ์ผ๋ก push๋๋ค.
pull
- Clone ํ ์๊ฒฉ ์ ์ฅ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก merge
- ์๋ merge ์ค ์ถฉ๋(conflict) ๋ฐ์ ์ ์คํจํ๋ฏ๋ก ์ถฉ๋ ์ฒ๋ฆฌ ํ์
- ์ ์ฌํ ๋ช ๋ น์ด๋ก fetch๊ฐ ์์
pull ์ค ์ถฉ๋์ด ๋ฐ์ํ๋ฉด merge --abort๋ก ๋๋๋ฆฌ๊ฑฐ๋ ์ถฉ๋๋ ๋ก์ปฌ ํ์ผ ์์ ํ add ํจ์ผ๋ก์จ ์ฒ๋ฆฌํ ์ ์๋ค.
1) git merge --abort
pull์ ์ทจ์ํ๊ณ merge ์๋ ์ ์ผ๋ก git ์ํ๋ฅผ ๋๋๋ฆผ
2) ์ถฉ๋๋ ๋ก์ปฌ ํ์ผ ์์ ํ add
์ถฉ๋๋ ๋ก์ปฌ ํ์ผ์ ์์ ํ๊ณ add ๋ช ๋ น์ ์ ๋ ฅํจ์ผ๋ก์จ ์ถฉ๋์ ํด๊ฒฐ ํ์์ git์๊ฒ ์๋ฆด ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๊ธฐ ์ํด commit, push๋ฅผ ๋ค์ ์ํํ๋ค.
fetch
- Clone ํ ์๊ฒฉ ์ ์ฅ์์์ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๊ณ , ์๋์ผ๋ก mergeํ์ง ์์
- ์๊ฒฉ ์ ์ฅ์์ ์ ๋ฐ์ดํธ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉ ๊ฐ๋ฅ
- ์๋์ผ๋ก mergeํ์ง ์์ผ๋ฏ๋ก merge ํ์
Related
References
'EnvironmentยทTool' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CLI ํ๊ฒฝ์์ Git ์ฌ์ฉํ๊ธฐ(๋ช ๋ น์ด ์ ๋ฆฌ) #2 (0) | 2020.08.06 |
---|---|
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 |
๋๊ธ