Git | Git workflow & git init/status/add/commit/log

happy tigerยท2022๋…„ 7์›” 2์ผ
0

Git & Github

๋ชฉ๋ก ๋ณด๊ธฐ
1/1
post-thumbnail

๐Ÿ” What is Git?

git์€ VCS(Version Control System/๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ) ์ค‘ ํ•˜๋‚˜๋กœ, ์ฝ”๋“œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ…์ŠคํŠธ ๋””์ž์ธ ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ ๋ชจ๋‘ ๋ฒ„์ „๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋“ค์€ ํ”„๋กœ์ ํŠธ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•˜๊ณ , ํŠน์ • ์‹œ์ ์˜ ๋ฒ„์ „์œผ๋กœ ์–ธ์ œ๋“  ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ํšจ์œจ์ ์œผ๋กœ ํ•จ๊ป˜ ์ž‘์—…ํ•˜๊ณ , ํ”„๋กœ์ ํŠธ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ˜‘์—…ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž์‹ ๋งŒ์˜ ํ”„๋กœ์ ํŠธ ๋ฒ„์ „์„ ๋ณธ์ธ ์ปดํ“จํ„ฐ์— ๊ฐ–๊ฒŒ๋œ๋‹ค. ๋‚˜์ค‘์— ์ด๋Ÿฌํ•œ ๊ฐœ๋ณ„ ๋ฒ„์ „์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณ‘ํ•ฉํ•˜์—ฌ ๊ธฐ์ค€์ด ๋˜๋Š” ๋ฒ„์ „์˜ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
VCS์—๋Š” ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

1. Centralized Version Control

๊ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์„œ๋ฒ„์— ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ฆ‰๊ฐ์ ์ธ ๋™๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ตฌ์กฐ์ด๋‹ค.
๋ฌธ์ œ์ ์€ ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ผ์„ ํ•  ์ˆ˜ ์—†๊ณ , ์˜คํ”„๋ผ์ธ์—์„œ๋„ ๋˜ํ•œ ์ผ์„ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

2. Distributed Version Control


Centralized Version Control์˜ ๋‹จ์ ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ Distributed Version Control์ด๋‹ค.
CVC์ฒ˜๋Ÿผ Server์—๋งŒ ํžˆ์Šคํ† ๋ฆฌ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋“ค์ด ๋™์ผํ•œ ํžˆ์Šคํ† ๋ฆฌ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค.

๊ณ ๋กœ, ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ฑฐ๋‚˜ ๋‹ค์šด์ด ๋˜์–ด๋„ ๊ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋™์ผํ•œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ์— ์„œ๋กœ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„๋ฅผ ๋ณต์›ํ•˜๊ณ  ์ผ์„ ์ด์–ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์˜คํ”„๋ผ์ธ์—์„œ๋„ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ server๋Š” ํšŒ์‚ฌ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” private server๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  Github, Bitbucket๊ฐ™์€ ํด๋ผ์šฐ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

๐Ÿ” Git Start

vscode ์—ฐ๊ฒฐ๋ฐฉ๋ฒ•

ํ„ฐ๋ฏธ๋„์—์„œ code . ํ•˜๋ฉด ์—ด๋ฆฐ๋‹ค.

git ๋ช…๋ น์˜ ๊ตฌ์กฐ

git ๋ช…๋ น์–ด -option
git commit -m

git ๋ช…๋ น์–ด --์†์„ฑ
git config --global

git ๋ช…๋ น์–ด --h๋ฅผ ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ „์ฒด ์˜ต์…˜๊ณผ ์†์„ฑ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
๋” ์ž์„ธํ•œ ์„ค๋ช…์€ ์ด Git ๋งํฌ์—์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•œ๋‹ค.

๐Ÿ” workflow์™€ ํ•จ๊ป˜ํ•˜๋Š” Git ๋ช…๋ น์–ด

git init

git init๋ช…๋ น์–ด๋Š” ๋‚˜์˜ local ํ”„๋กœ์ ํŠธ ํด๋” ๋‚ด์— ์ˆจ๊ฒจ์ง„ .git ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด์ œ Git์€ ํ˜„์žฌ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”์ /๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.
(ํŒŒ์ผ์ด๋‚˜ ํด๋” ์•ž์— .์ด ๋ถ™์œผ๋ฉด ๊ทธ ํŒŒ์ผ/ํด๋”๋Š” ์ˆจ๊ฒจ์ง„ ํŒŒ์ผ/ํด๋”์ด๋‹ค.)

ls -a๋Š” ์ˆจ๊ฒจ์ง„ ํŒŒ์ผ๊นŒ์ง€ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ˜๋ฉด,-a์˜ต์…˜์„ ์ œ๊ฑฐํ•œ ls๋Š” ์ˆจ๊ฒจ์ง„ ํŒŒ์ผ์„ ์ œ์™ธํ•œ ํŒŒ์ผ์˜ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๋ฏ€๋กœ ๊ฒฐ๊ณผ์— .gitํŒŒ์ผ์ด ๋ณด์ด์ง€ ์•Š์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

master branch

gitํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ฉด Git์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 'master'๋ผ๋Š” ์ด๋ฆ„์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด ์ƒˆ๋กœ์šด ์ €์žฅ์†Œ์— ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ถ”๊ฐ€ ํ•œ๋‹ค๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•œ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ทธ ๋‚ด์šฉ์„ commitํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋‘ 'master'๋ผ๋Š” ์ด๋ฆ„์˜ ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ๋œ๋‹ค.
'master'๊ฐ€ ์•„๋‹Œ ๋˜ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด '์•ž์œผ๋กœ ์ด ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ• ๊ฑฐ์•ผ!'๋ผ๊ณ  checkoutํ•˜์ง€ ์•Š๋Š” ์ด์ƒ, ์ด ๋•Œ์˜ ๋ชจ๋“  ์ž‘์—…์€ 'master'๋ธŒ๋žœ์น˜์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

git workflow

git init์„ ํ•˜๋ฉด ์ด์ œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ํŒŒ์ผ๋“ค์€ git์˜ ์ž‘์—…ํ™˜๊ฒฝ์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋œ๋‹ค.
git์—๋Š” ์ด 3๊ฐ€์ง€์˜ ์ž‘์—…ํ™˜๊ฒฝ์ด ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค.
ํ”„๋กœ์ ํŠธ์˜ ํŒŒ์ผ๋“ค์„ ์ˆ˜์ • ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์„ ํ•˜๋Š” working directory, ์–ด๋Š์ •๋„ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ๋ฒ„์ „ ํžˆ์Šคํ† ๋ฆฌ์— ์ €์žฅํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ์˜ฎ๊ฒจ๋†“๋Š” staging area, ๋ฒ„์ „ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” .git repository(.git directory)๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.


working directory๋ฅผ ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด git์ด tracking์„ ํ•˜๊ณ ์žˆ๋Š” tracked, ์ƒˆ๋กœ๋งŒ๋“ค์–ด์กŒ๊ฑฐ๋‚˜ ์•„์ง tracking์ด ๋˜์ง€ ์•Š์€ untracked๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
๊นƒ์ด trackingํ•˜๊ณ  ์žˆ๋Š” ์ค‘์ธ tracked์—์„œ๋„ ์ง€๊ธˆ ์ด์‹œ์ ์— ์ˆ˜์ •์ด ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ unmodified , modified๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. unmodified๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ˆ˜์ •์ด ์•ˆ ๋œ ๊ฒƒ์ด๋ฏ€๋กœ modified๋งŒ staging area๋กœ ์˜ฎ๊ฒจ๊ฐ„๋‹ค.

์ด์ œ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉฐ, ๋ช…๋ น์–ด์™€ ํ•จ๊ป˜ ์ดํ•ดํ•ด๋ณด์ž.

echo ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ 3๊ฐœ์˜ txtํŒŒ์ผ์— ์ ์–ด ์ €์žฅํ•˜์˜€๋‹ค.
๋ฐฉ๊ธˆ ๋งŒ๋“ค์–ด์ง„ ์ƒˆ ํŒŒ์ผ๋“ค์ด๊ธฐ์— ์•„์ง untracked์ธ working directory์— ์œ„์น˜ํ•œ๋‹ค.

๋งˆ์Šคํ„ฐ๋ธŒ๋žœ์น˜์˜ ์ƒ‰์ƒ์ด ์ดˆ๋ก์—์„œ ๋…ธ๋ž‘or ์ฃผํ™ฉ์ด ๋œ ์ด์œ ๋Š”?!
working directory์— commit ๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ–ˆ์Œ์„ ๋ณด์—ฌ์ค€๋‹ค. ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์ด commit๋˜๋ฉด master branch์˜ ์ƒ‰์ƒ์€ ๋‹ค์‹œ ์ดˆ๋ก์ƒ‰์ด ๋œ๋‹ค.

git add

git์ด trackingํ•  ์ˆ˜ ์žˆ๋„๋ก working directory์—์„œ staging area์— ์˜ฌ๋ฆฌ๋ ค๋ฉด add๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
์œ„์™€ ๊ฐ™์ด ๊ณต๋ฐฑ์œผ๋กœ ํŒŒ์ผ ๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ ์ฃผ๋ฉด ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ํ•œ ๋ฒˆ์— add ํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฒฐ๊ณผ์ ์œผ๋กœ, a.txt, b.txt, c.txt๋ชจ๋‘ add๋˜์–ด staging area์— ์˜ฌ๋ผ๊ฐ”์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ž์‹ ์˜ ์œ„์น˜๋ถ€ํ„ฐ ํ•˜์œ„ ํด๋”์˜ ํŒŒ์ผ๋“ค๊นŒ์ง€ ๋ชจ๋‘ ์˜ฌ๋ฆฌ๋ ค๋ฉด git add .๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
๋งŒ์•ฝ, txtํŒŒ์ผ๋งŒ ์—…๋กœ๋“œ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด git add *.txt๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

staging area์— ์˜ฌ๋ผ๊ฐ„ a.txt์— 'ellie'๋ฅผ ์ถ”๊ฐ€๋ฅผ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

๋™์ผํ•œ ํŒŒ์ผ์ด์–ด๋„ ์ถ”๊ฐ€๋œ 'ellie'๊ฐ€ staging area์˜ a.txt์— ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋™์ผํ•œ ํŒŒ์ผ ์ผ์ง€๋ผ๋„ ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์ง€๋ฉด ๋‹ค์‹œ add, commit์„ ํ•ด์•ผํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ a.txt๊ฐ€ tracking์ด ๋˜๋Š” staging area์— ์žˆ์œผ๋ฏ€๋กœ git status๋ฅผ ํ–ˆ์„ ๋•Œ modified: a.txt๋ผ๊ณ  ๋œจ๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

workflow์— ๋ณด๊ธฐ์ข‹๊ฒŒ ํ‘œํ˜„ํ•˜๋ฉด ์œ„์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

.gitignore ํŒŒ์ผ

๋กœ๊ทธ๋‚˜ ๋นŒ๋“œ๋ฅผ ํ–ˆ์„ ๋•Œ ๋นŒ๋“œ ์•ˆ์˜ ๋ถ€์ˆ˜์ ์ธ ํŒŒ์ผ๋“ค์€ git์— ํฌํ•จํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ˆจ๊ธฐ๊ณ  ์‹ถ์€ ํŒŒ์ผ๋“ค์ด ์กด์žฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด .gitignoreํŒŒ์ผ์ด๋‹ค.
git๊ณผ github์— ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์ง€ ์•Š์€ ํŒŒ์ผ(track ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ํŒŒ์ผ)๋“ค์€ .gitignore์ด๋ผ๋Š” ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

log.log๋ผ๋Š” ํŒŒ์ผ์„ ์ˆจ๊ธฐ๊ณ  ์‹ถ๋‹ค๊ณ  ํ•˜์ž.

ํ˜„์žฌ๋Š” git status์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ ํŒŒ์ผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
echo *.log > .gitignore๋กœ .logํŒŒ์ผ๋“ค์„ .gitignore ํŒŒ์ผ์•ˆ์— ๋„ฃ์—ˆ๋‹ค.
list๋ฅผ ๋ณด๋ฉด .gitignore๊ฐ€ ์ƒ๊ธด ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
๋‹ค์‹œ git status๋ฅผ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋‚˜์˜ฌ๊นŒ?

log.log๋Š” ์ˆจ๊ฒจ์ ธ ์ด์ œ ๋ณด์ด์ง€ ์•Š๊ณ  .gitignore๋งŒ ๋ณด์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ํด๋” ํŒŒ์ผ ํ‘œํ˜„ํ•˜๊ธฐ
*.log .log๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ
build/ build๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— ์žˆ๋Š”ํŒŒ์ผ
build/.logbuild ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์˜ .log๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ

git status

git status๋Š” git์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ํŒŒ์ผ๋“ค์˜ ์ƒํƒœ๋ฅผ ์•Œ๋ ค์ค€๋‹ค.
git status -s๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณด์ž.

A๋Š” added๊ฐ€ ๋˜์–ด staging area์— ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.
?๋Š” ์•„์ง ํŠธ๋ž˜ํ‚น์ด ๋˜์ง€ ์•Š๋Š” working directory์— ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.
์—ฌ๊ธฐ์„œ c.txt ํŒŒ์ผ์— ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด์ž.

AM์€ stagingarea์— add๊ฐ€ ๋˜์—ˆ๊ณ , working directory์—์„œ modified๋˜์—ˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

git commit

staging area์— ์žˆ๋Š” a.txt ํŒŒ์ผ์„ .git directory์— ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ค ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ ๊นŒ?

commit ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ staging area์— ์žˆ๋Š” ํŒŒ์ผ์„ git diretory๋กœ ์ด๋™ ์ฆ‰, history์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
(์ด๋ ‡๊ฒŒ ๊นƒ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋œ ๋ฒ„์ „๋“ค์€ checkout๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ์›ํ•˜๋Š” ๋ฒ„์ „์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.)

์ด๋ ‡๊ฒŒ ์ €์žฅ๋œ ๊นƒํžˆ์Šคํ† ๋ฆฌ๋Š” ๋‚˜์˜ ์ปดํ“จํ„ฐ์—๋งŒ ๋ณด๊ด€๋œ๋‹ค. ๋‹ค๋ฅด๊ฒŒ ๋งํ•˜๋ฉด, ๋‚ด ์ปดํ“จํ„ฐ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋‹ค ์žƒ์–ด๋ฒ„๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋ž˜์„œ ๋ณดํ†ต .git directory๋Š” Github๊ฐ™์€ ์„œ๋ฒ„์— push๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ์—…๋กœ๋“œ๋ฅผ ํ•˜์—ฌ, ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•œ๋‹ค. ( ๋ฐ˜๋Œ€๋กœ ์„œ๋ฒ„์—์„œ local๋กœ ๋‹ค์šด๋ฐ›๊ณ ์‹ถ์œผ๋ฉด pull๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.)

์—ฌ๊ธฐ์„œ ๊ฐ๊ฐ์˜ ๋ฒ„์ „๋“ค์— ์–ด๋–ค ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.
๊ฐ๊ฐ์˜ ์ปค๋ฐ‹๋“ค์—” ์Šค๋ƒ…์ƒท๋œ ์ •๋ณด๋“ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ๊ณ ์œ ํ•œ ํ•ด์‹œ์ฝ”๋“œ๊ฐ€ ๋ถ€๊ณผ๋œ๋‹ค. ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฒ„์ „ ์ •๋ณด์— ๋Œ€ํ•ด ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. commit์—๋Š” ์•„์ด๋”” ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฒ„์ „๊ด€๋ฆฌ ๋ฉ”์‹œ์ง€์™€ ๋ˆ„๊ฐ€ ์ž‘์„ฑํ–ˆ๋Š”์ง€, ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๊ฐ™์€ ๊ฒƒ๋„ ์ž‘์„ฑ๋œ๋‹ค.

git add + commit ํ•œ๊บผ๋ฒˆ์— ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ณดํ†ต git add . ๋กœ working directory์—์„œ staging area๋กœ ์˜ฎ๊ธฐ๊ณ , staging area์—์„œ git commit -m " ~ " ๊ผด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋‚จ๊ธฐ๋ฉฐ commit์„ ํ•˜์—ฌ git directory๋กœ ์˜ฎ๊ธด๋‹ค.
๋งŒ์•ฝ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๊ฒƒ์ด ๋ชจ๋‘ ๋ง˜์— ๋“ ๋‹ค๋ฉด git commit -am " ~ "๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ add์™€ commit์„ ํ•œ ๋ฒˆ์— ํ•  ์ˆ˜ ์žˆ๋‹ค.

commit Tip

๊นƒ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์šฐ๋ฆฌ์˜ ์ปค๋ฐ‹๋“ค์€ ์ž‘์—…๋“ค์„ ๋ฒ„์ „ ๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์šฉํ•œ history ์ฐฝ๊ณ ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๋ณ€๊ฒฝ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

Tip 1
์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๋ณ€๊ฒฝ๋“ค์„ ์˜๋ฏธ๋ฅผ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ ์–ด ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋ณดํ†ต ์ปค๋ฐ‹์˜ ๋ฉ”์„ธ์ง€๋Š” ํ˜„์žฌํ˜•์œผ๋กœ ๊ทธ๋ฆฌ๊ณ  ๋™์‚ฌํ˜•์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค..(e.g. init, add, fix)

Tip 2

ํ˜„์—…์—์„œ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ํ•˜๋Š” ์‹ค์ˆ˜์ด๋‹ค.
๋‚ด๊ฐ€ Fix crashing on login module ์ฆ‰, crashing์„ ๊ณ ์ณค๋‹ค๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋‚จ๊ธฐ๋ฉด ์ •๋ง ๊ทธ code๋งŒ ์ˆ˜์ •ํ•˜์—ฌ commit ํ•ด์•ผํ•œ๋‹ค. 'ํ•˜๋Š” ๊น€์— ๋‹ค๋ฅธ ๋ฒ„๊ทธ๋“ค๋„ ๊ณ ์น˜์ž'๋ผ๋Š” ๋งˆ์Œ์œผ๋กœ ์—ฌ๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ๋ฉด ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๊ฑฐ๋‚˜, ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ฐ”๋ผ๋ณผ ๋•Œ ํ˜ผ๋™์ด ์˜จ๋‹ค.

git log v.s. git reflog

git log
ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์ปค๋ฐ‹ ๋‚ด์—ญ์„ ๋ณด๋ ค๋ฉด git log ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.
์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์™€ ์Šคํ…Œ์ด์ง• ์˜์—ญ์„ ์ œ์–ดํ•˜๋Š” git status์™€ ๋น„๊ตํ•˜์—ฌ git log๋Š” ์ปค๋ฐ‹๋œ ํžˆ์Šคํ† ๋ฆฌ์—์„œ๋งŒ ์ž‘๋™ํ•œ๋‹ค. ์ „๋ฐ˜์ ์œผ๋กœ git log ๋ช…๋ น์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ธฐ๋ก์„ ์‚ดํŽด๋ณด๊ณ  ํ”„๋กœ์ ํŠธ์˜ ํŠน์ • ๋ฒ„์ „์„ ์ฐพ๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค.
git log ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ณด์—ฌ์ง€๋Š” log๋Š” ๊ฐ ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. (์ž‘์„ฑ์ž, hash ๊ฐ’, ๋‚ ์งœ์™€ ์‹œ๊ฐ„, ๊ทธ๋ฆฌ๊ณ  ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€)
$ git log

commit a7b4db3d6cfa0267712a3b6b6adbb1bc78f84abb (HEAD -> main, origin/main)
Author: seoyun <dhn04100@gmail.com>
Date:   Thu Jan 5 21:13:33 2023 +0900

    Git ํด๋” ์ด๋™

commit 2a2a4ad104445e46566a9996fca646408ad8df44
Author: seoyun <dhn04100@gmail.com>
Date:   Thu Jan 5 21:12:34 2023 +0900

    add Git workflow

๋งŒ์•ฝ ํŠน์ • ์ปค๋ฐ‹ ์‹œ์ ์˜ ์ฝ”๋“œ๋กœ ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด, ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
git checkout <commit-hash> ๋˜๋Š” git reset <commit-hash>
<commit-hash> ๋ฅผ git log ์—์„œ ๋ณด์ด๋Š” ์ปค๋ฐ‹์˜ ์‹ค์ œ hash ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•ด์ค˜์•ผ ํ•œ๋‹ค.

๋‹ค์Œ์ฒ˜๋Ÿผ --oneline์œผ๋กœ ๊ฐ„๋žตํ•˜๊ฒŒ ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค.
$ git log --oneline

a7b4db3 (HEAD -> main, origin/main) Git ํด๋” ์ด๋™
2a2a4ad add Git workflow

ํŠน์ • ๊ฐœ์ˆ˜๋ฅผ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด -n ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์šฉํ•œ๋‹ค.
$ git log -n 10 ์ตœ๊ทผ 10๊ฐœ ์ปค๋ฐ‹๋งŒ ์ „์‹œ
๊นƒ์„ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋กœ ๊น”๋”ํ•˜๊ฒŒ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.
์ปค๋ฐ‹์˜ ์ „์ฒด์ ์ธ ๋ฐฉํ–ฅ๊ณผ ๋จธ์ง€๋œ ํ๋ฆ„๋„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

$ git log --oneline --decorate --graph
์ปค๋ฐ‹๊ณผ ๋ธŒ๋žœ์น˜์˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋‹ค์–‘ํ•˜๊ณ  ์‰ฝ๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” Sourcetree๋‚˜ GitHub Desktop ๊ฐ™์€ GUI ํˆด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

git show
git show ๋ช…๋ น์–ด๋กœ ๊ฐ€์žฅ ์ตœ๊ทผ ์ปค๋ฐ‹์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
$ git show

commit a7b4db3d6cfa0267712a3b6b6adbb1bc78f84abb (HEAD -> main, origin/main)
Author: seoyun <dhn04100@gmail.com>
Date:   Thu Jan 5 21:13:33 2023 +0900

    Git ํด๋” ์ด๋™

diff --git a/CS/Git/workflow.md b/Git/workflow.md
similarity index 100%
rename from CS/Git/workflow.md
rename to Git/workflow.md

ํŠน์ • ์ปค๋ฐ‹ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด git show ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.
$ git show c008c4785eeb14a395b4aa6cf9fa3b9e5896f5a4
$ git show HEAD^ # HEAD ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

git reflog
reflog๋Š” ์—„๊ฒฉํ•˜๊ฒŒ ๋กœ์ปฌ์ด๋ฉฐ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋‹ค. push, pull ๋˜๋Š” clone์—๋„ ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค. Git์€ git reflog ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ branch tip(๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹)์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•œ๋‹ค.
git reflog ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด git reset, git rebase ๋ช…๋ น์–ด๋กœ ์‚ญ์ œ๋œ ์ปค๋ฐ‹์„ ํฌํ•จํ•œ ๋ชจ๋“  ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
$ git reflog

a7b4db3 (HEAD -> main, origin/main) HEAD@{0}: commit: Git ํด๋” ์ด๋™
2a2a4ad HEAD@{1}: commit: add Git workflow
74f2bad HEAD@{2}: commit: fix ๋ณ€์ˆ˜๋ช… ๊ทœ์น™
447a5a3 HEAD@{3}: commit: add JAVA ch2
a5b1039 HEAD@{4}: pull origin main: Fast-forward

git reflog๋Š” ์ด์ „ ๋ช…๋ น์–ด(ex. git reset --hard)๋ฅผ ์ทจ์†Œํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.
git reset ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์•„๋ž˜์—์„œ ๋‚˜์˜ค์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ๊ฐ„๋žตํ•˜๊ฒŒ git reflog๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์„ ์‚ดํŽด๋ณธ๋‹ค.
๋งŒ์•ฝ ์ž‘์—… ์ค‘์— ๋‹ค์Œ์ฒ˜๋Ÿผ git reset โ€“hard๋กœ ์ด์ „ ์ปค๋ฐ‹์œผ๋กœ ๋Œ์•„๊ฐ”๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
$ git reset 74f2bad --hard

HEAD is now at 74f2bad fix ๋ณ€์ˆ˜๋ช… ๊ทœ์น™

์ด๋•Œ ์ผ๋ฐ˜์ ์ด๋ผ๋ฉด git reset ํ•˜๊ธฐ ์ „์˜ ์ž‘์—… ๋‚ด์—ญ์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์—†์ง€๋งŒ, git reflog์—๋Š” ์ด๋ ‡๊ฒŒ git reset ํ•œ ๋ช…๋ น ๋‚ด์—ญ๊นŒ์ง€ ๋ชจ๋‘ ๋‚จ์•„์žˆ๋‹ค.
$ git reflog

74f2bad HEAD@{0}: reset: moving to 74f2bad
a7b4db3 (HEAD -> main, origin/main) HEAD@{1}: commit: Git ํด๋” ์ด๋™
2a2a4ad HEAD@{2}: commit: add Git workflow
74f2bad HEAD@{3}: commit: fix ๋ณ€์ˆ˜๋ช… ๊ทœ์น™

๋”ฐ๋ผ์„œ git reset --hard ํ•œ ๋ช…๋ น์„ ์ทจ์†Œํ•˜๊ณ  ์‹ถ์œผ๋ฉด (๋ช…๋ น ์ด์ „์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ์œผ๋ฉด) git reflog ์—์„œ ํ•ด๋‹น ๋ช…๋ น ์ง์ „์˜ ์ปค๋ฐ‹ ํ•ด์‹œ ๊ฐ’์„ ์ฐธ์กฐํ•˜์—ฌ git reset --hard ํ•˜๋ฉด ๋œ๋‹ค.
$ git reset a7b4db3 --hard

HEAD is now at a7b4db3 Git ํด๋” ์ด๋™

git log v.s. git reflog
1. log๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ปค๋ฐ‹ ๊ธฐ๋ก์˜ ๊ณต๊ฐœ ๋ ˆ์ฝ”๋“œ์ธ ๋ฐ˜๋ฉด reflog๋Š” ๋น„๊ณต๊ฐœ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. push, fetch ๋˜๋Š” pull ํ›„์— git ๋กœ๊ทธ๋Š” git ์ €์žฅ์†Œ์˜ ์ผ๋ถ€๋กœ ๋ณต์ œ๋œ๋‹ค. ๋ฐ˜๋ฉด์— git reflog๋Š” git ์ €์žฅ์†Œ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.
2. git log๋Š” ์ฐธ์กฐ(ํ—ค๋“œ, ํƒœ๊ทธ, ์›๊ฒฉ)์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋ฐ‹ ๋กœ๊ทธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
git reflog๋Š” ์–ธ์ œ๋“ ์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ฐธ์กฐ๋˜๊ฑฐ๋‚˜ ์ฐธ์กฐ๋œ ๋ชจ๋“  ์ปค๋ฐ‹ ์˜ ๊ธฐ๋ก์ด๋‹ค.

profile
ํ˜ธ๊ธฐ์‹ฌยท๋ˆ๊ธฐยท์„ฑ์žฅยท๋ฐœ์ „ยทํ–‰๋ณตยทํ˜‘๋ ฅ ูฉ(เน‘โ€ขฬ€ใ…‚โ€ขฬ)ูˆ

0๊ฐœ์˜ ๋Œ“๊ธ€