Computer-Science

Git

ํ–ฃํ–ฃํ–ฃ

๋ชฉ์ฐจ


1. ๋ฒ„์ „ ๊ด€๋ฆฌ์˜ ์ฒซ ์‹œ์ž‘

๋ฒ„์ „์ด ๋˜๊ธฐ๊นŒ์ง€ ๊ฑฐ์ณ๊ฐ€๋Š” ์„ธ ๊ฐœ์˜ ๊ณต๊ฐ„

  1. Working directory (์ž‘์—… ๊ณต๊ฐ„)
  2. Staging Area
  3. Repository (์ €์žฅ์†Œ)

๋ช…๋ น์–ด ์‚ดํŽด๋ณด๊ธฐ

๋“ค์–ด๊ฐ€๊ธฐ ์ „์— โ€ฆ

์ง€๊ธˆ๋ถ€ํ„ฐ ๊ฐ ์„น์…˜๋งˆ๋‹ค ๋‚˜์˜ค๋Š” ํ„ฐ๋ฏธ๋„ ๋ช…๋ น์–ด ๋งจ ์•ž์˜ $ ๊ธฐํ˜ธ๋Š” command line ์ž„์„ ์•Œ๋ ค์ฃผ๋Š” ํ‘œ์‹œ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ„ฐ๋ฏธ๋„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋Š” $ ๊ธฐํ˜ธ๋Š” ๋ฌด์‹œํ•˜๋ฉด ๋œ๋‹ค.

์˜ˆ์‹œ :

$ git XXXX

์ฐธ๊ณ ๋กœ, Git์˜ ๋ชจ๋“  ๋ช…๋ น์–ด๋Š” $ git ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.

git ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ (๋ฒ„์ „๊ด€๋ฆฌ ์‹œ์ž‘)

$ git init

๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด .git ์ด๋ผ๋Š” ์ˆจ๊น€ ํด๋”๊ฐ€ ์ƒ๊ธด๋‹ค.

(์ˆจ๊น€ ํŒŒ์ผ / ํด๋”๊นŒ์ง€ ํฌํ•จํ•œ) ๋ชจ๋“  ํŒŒ์ผ / ํด๋” ๋ชฉ๋ก ๋ณด๊ธฐ
$ ls -al

๋ฒ„์ „๊ด€๋ฆฌ๊ฐ€ ๋˜๊ณ  ์žˆ๋Š” ํด๋”์˜ ์ƒํƒœ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋ช…๋ น์–ด

$ git status

Working directory์—์„œ Staging Area๋กœ ์ด๋™์‹œํ‚ค๊ธฐ

Staging Area์—์„œ Repository๋กœ ์ด๋™์‹œํ‚ค๊ธฐ

$ git commit -m "commit message"

์ปค๋ฐ‹ํ•œ ๋‚ด์—ญ(log)์„ ํ™•์ธํ•˜๊ธฐ

$ git log

^Z (Ctrl+Z)๋กœ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

Tip) add์™€ commit์„ ๋™์‹œ์— ํ•˜๊ธฐ

$ git commit -am "commit message"

๋‹จ, ํ•œ ๋ฒˆ ์ด๋ผ๋„ commit์„ ํ•œ ๋Œ€์ƒ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

GitHub์— ๋‚ด ์ฝ”๋“œ pushํ•˜๊ธฐ

$ git remote add origin https://github.com/oneonlee/git_test.git
# ์›๊ฒฉ ์ €์žฅ์†Œ์™€ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด์ด๋‹ค. (๋กœ์ปฌ ์ €์žฅ์†Œ์— ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๋“ฑ๋ก)

$ git branch -M main
# main branch๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

$ git push -u origin main
# ๋ง ๊ทธ๋Œ€๋กœ pushํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

๊ธฐ์กด์— ์žˆ๋˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋‚ด ์ฝ”๋“œ๋ฅผ pushํ•˜๊ณ  ์‹ถ์„ ๋•Œ

error 1

error: origin ๋ฆฌ๋ชจํŠธ๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.

error 2

error: ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ โ€˜https://github.com/oneonlee/git_test.gitโ€™์— ํ‘ธ์‹œํ•˜๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค
ํžŒํŠธ: ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ๋์ด ๋ฆฌ๋ชจํŠธ ๋ธŒ๋žœ์น˜๋ณด๋‹ค ๋’ค์— ์žˆ์œผ๋ฏ€๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ‘ธ์‹œํ•˜๊ธฐ ์ „์— (โ€˜git pull โ€ฆโ€™ ๋“ฑ ๋ช…๋ น์œผ๋กœ) ๋ฆฌ๋ชจํŠธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํฌํ•จํ•˜์‹ญ์‹œ์˜ค.
ํžŒํŠธ: ์ž์„ธํ•œ ์ •๋ณด๋Š” โ€˜git push โ€“helpโ€™์˜ โ€œNote about fast-forwardsโ€™ ๋ถ€๋ถ„์„ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.


2. ๋ฒ„์ „์„ ๋˜๋Œ๋ฆฌ๊ณ , ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜์ž.

git์œผ๋กœ ๋˜๋Œ๋ฆฌ์ž

Working directory, Staging area, Repository์— ์˜ฌ๋ฆฐ ๋‚ด์šฉ์€ ์–ด๋–ป๊ฒŒ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์„๊นŒ?

1) ๋˜๋Œ๋ฆฌ๋Š” ๋ช…๋ น์–ด git reset

2) git revert

git revert๋„ git reset๊ณผ ๋™์ผํ•˜๊ฒŒ commit์„ ๋˜๋Œ๋ฆฌ๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

  $ git revert <๋˜๋Œ์•„๊ฐ€๊ณ  ์‹ถ์€ commit>

reset๊ณผ revert์˜ ์ฐจ์ด์ 

git reset๊ณผ git revert๋Š” commit์„ ๊ณผ๊ฑฐ ์‹œ์ ์œผ๋กœ ๋˜๋Œ๋ ค์ค€๋‹ค๋Š” ์ ์—์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์ง€๋งŒ, ์ฐจ์ด์ ์€ ๋˜๋Œ๋ฆฌ๋Š” commit๊นŒ์ง€์˜ ์ด๋ ฅ์ด ์‚ฌ๋ผ์ง€๋Š๋ƒ์˜ ์—ฌ๋ถ€์— ์žˆ๋‹ค.

git reset์€ ๋˜๋Œ๋ฆฐ ๋ฒ„์ „ ์ดํ›„์˜ ๋ฒ„์ „๋“ค์ด ๋ชจ๋‘ ์‚ฌ๋ผ์ง€๊ฒŒ ๋˜์ง€๋งŒ, git revert๋Š” ๋˜๋Œ๋ฆฐ ๋ฒ„์ „ ์ดํ›„์˜ ๋ฒ„์ „๋“ค์€ ๋ชจ๋‘ ์œ ์ง€๋˜๊ณ , revert๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋‹ด์€ commit๋งŒ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ๋‹ค.

์•„๋ž˜ ์˜ˆ์ œ์—์„œ 3๋ฒˆ commit์œผ๋กœ reset์„ ํ•˜๋ฉด 4, 5๋ฒˆ commit์€ ์‚ญ์ œ๋˜์ง€๋งŒ, 3๋ฒˆ commit์œผ๋กœ revert๋ฅผ ํ•˜๋ฉด 4,5๋ฒˆ commit์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.

์ฆ‰, reset์€ ๊ณผ๊ฑฐ ์ž์ฒด๋ฅผ ๋ฐ”๊พธ๋Š” ๋ช…๋ น์–ด์ด๊ณ , revert๋Š” ๊ณผ๊ฑฐ๋ฅผ ๋ณ€๊ฒฝ์‹œ์ผฐ๋‹ค๋Š” ์ƒˆ๋กœ์šด commit์œผ๋กœ์จ ์ƒˆ๋กœ์šด commit์„ ๋งŒ๋“œ๋Š” ๋ช…๋ น์–ด๋‹ค.

์‹ค์šฉ์ ์ธ ๋ฉด์œผ๋กœ ๋”ฐ์ ธ ๋ณด์•˜์„ ๋•Œ, revert๋Š” reset๋ณด๋‹ค ๋” ์•ˆ์ „ํ•˜๊ฒŒ commit์„ ๋˜๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ด๊ณ , reset์€ revert๋ณด๋‹ค commit log๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•ด์ฃผ๋ฉฐ commit์„ ๋˜๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ ๊ด€์ ์—์„œ reset๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ์˜ ์ด์•ผ๊ธฐ์ด๊ธด ํ•˜์ง€๋งŒ, -n ์˜ต์…˜์„ ์ด์šฉํ•˜๋ฉด revert๋ฅผ ์จ๋„ commit์„ ๋‚จ๊ธฐ์ง€ ์•Š์„ ์ˆ˜๋Š” ์žˆ๋‹ค.

๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜์ž

ํ˜„์žฌ branch ๋ชฉ๋ก ํ™•์ธํ•˜๊ธฐ

$ git branch

์ƒˆ branch ๋งŒ๋“ค๊ธฐ

$ git branch <๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

๋‹ค๋ฅธ branch๋กœ ๋“ค์–ด๊ฐ€๊ธฐ

$ git checkout <๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

์ƒˆ branch๋ฅผ ๋งŒ๋“ค๊ณ  ๋™์‹œ์— ๊ทธ branch๋กœ ๋“ค์–ด๊ฐ€๊ธฐ

$ git checkout -b <๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

์–ด๋–ค branch๋ฅผ ์–ด๋””๋กœ ํ•ฉ์น  ๊ฒƒ์ธ๊ฐ€?

(๋งŒ์•ฝ์— โ€˜my_branchโ€™๋ผ๋Š” branch๋ฅผ โ€˜mainโ€™์— ํ•ฉ์น˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด,)

๋ณ€๊ฒฝ๋‚ด์—ญ๋“ค์„ ๋น„๊ตํ•˜๊ณ  ์‹ถ์„ ๋•Œ

$ git diff

git diff๋Š” ๋ณ€๊ฒฝ๋‚ด์—ญ๋“ค๋ผ๋ฆฌ์˜ ๋น„๊ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

1) ๋‘ ์ปค๋ฐ‹ ๊ฐ„์˜ ๋น„๊ต

์˜ˆ๋ฅผ ๋“ค์–ด ํ˜„์žฌ ์ €์žฅ์†Œ์— ํŒŒ์ผ์ด test.txt ๋‹ฌ๋ž‘ ํ•˜๋‚˜ ์žˆ๊ณ , 1๋ฒˆ๋ถ€ํ„ฐ 5๋ฒˆ commit์ด ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์˜ commit์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

git log๋ฅผ ํ†ตํ•ด commit ๋‚ด์—ญ๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

$ git log
commit f7fe32715c4bd705110196134271d8f873384316 (HEAD -> master)
Author: Lee Dong-geon <peter8739@gmail.com>
Date:   Tue Dec 1 23:06:03 2020 +0900

    5

commit 2845ce53054627b3381c9f2515dc7545cff2347b
Author: Lee Dong-geon <peter8739@gmail.com>
Date:   Tue Dec 1 23:05:49 2020 +0900

    4

commit de6d5c1148981e15617999c7ecaa6ec2ea21ff29
Author: Lee Dong-geon <peter8739@gmail.com>
Date:   Tue Dec 1 23:05:38 2020 +0900

    3

commit 1d7fce052aafb388ddf092ea315835f5154683f7
Author: Lee Dong-geon <peter8739@gmail.com>
Date:   Tue Dec 1 23:04:52 2020 +0900

    2

commit 6958b6b21e15aa0be36736016c5bc955b57a61be
Author: Lee Dong-geon <peter8739@gmail.com>
Date:   Tue Dec 1 23:04:38 2020 +0900

    1

commit ์˜†์— ๋งˆ๊ตฌ์žก์ด๋กœ ์ƒ๊ธด ๋ฌธ์ž์—ด (f7fe32715c4bd705110196134271d8f873384316 ๋“ฑ๋“ฑโ€ฆ) ์€ ๊ฐ๊ฐ์˜ commit์„ ๋‚˜ํƒ€๋‚ด๋Š” commit hash์ด๋‹ค. ์ด commit์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ง์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

$ git diff 2845ce53054627b3381c9f2515dc7545cff2347b f7fe32715c4bd705110196134271d8f873384316
diff --git a/test.txt b/test.txt
index 8422d40..8fda00d 100644
--- a/test.txt
+++ b/test.txt
@@ -2,3 +2,4 @@ A
 B
 C
 D
+E          # 4๋ฒˆ Commit์— ๋น„ํ•ด E๋ผ๋Š” ๋ฌธ์ž์—ด์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค(+ ํ‘œ์‹œ)

2) ์ด์ „ commit๊ณผ ์ „์ „ commit์˜ ๋น„๊ต

๋งค๋ฒˆ ์ด๋ ‡๊ฒŒ commit hash๋ฅผ ์“ฐ๋Š”๊ฒŒ ๊ท€์ฐฎ์œผ๋ฏ€๋กœ, HEAD๋ฅผ ์ด์šฉํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค.

HEAD๋Š” ํ˜„์žฌ branch์˜ ๊ฐ€์žฅ ์ตœ๊ทผ commit, HEAD^๋Š” ํ˜„์žฌ branch์˜ ๊ฐ€์žฅ ์ตœ๊ทผ commit์—์„œ ํ•˜๋‚˜ ์ด์ „ commit์„ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ,

$ git diff HEAD HEAD^๋Š” ์ด์ „ commit (5๋ฒˆ)๊ณผ ์ „์ „ commit (4๋ฒˆ)์„ ๋น„๊ตํ•˜๋ผ๋Š” ๋ช…๋ น์ด๋‹ค.

$ git diff HEAD^ HEAD
diff --git a/test.txt b/test.txt
index 8422d40..8fda00d 100644
--- a/test.txt
+++ b/test.txt
@@ -2,3 +2,4 @@ A
 B
 C
 D
+E

3) ์ด์ „ commit๊ณผ ํ˜„์žฌ ์ˆ˜์ •๋œ ๋‚ด์šฉ ๋น„๊ต

์•„์ง commitํ•˜์ง€ ์•Š์€, ์ˆ˜์ •๋œ ๋‚ด์šฉ๊ณผ ์ด์ „ commit (์ด ์˜ˆ์ œ์—์„œ๋Š” 5๋ฒˆ commit)๊ณผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด git diff HEAD๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด test.txt์— F๋ผ๋Š” ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , $ git diff HEAD๋ฅผ ์นœ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

$ git diff HEAD
diff --git a/test.txt b/test.txt
index 8fda00d..cead32e 100644
--- a/test.txt
+++ b/test.txt
@@ -3,3 +3,4 @@ B
 C
 D
 E
+F

์ฆ‰, ์•„์ง commitํ•˜์ง€ ์•Š์€ ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ๋‚ด์šฉ์„ ๊ฐ€์žฅ ์ตœ๊ทผ commitํ•œ ๋‚ด์šฉ๊ณผ ๋น„๊ตํ•œ ๊ฒฐ๊ณผ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

4) ์›๊ฒฉ ์ €์žฅ์†Œ์™€ ๋กœ์ปฌ ์ €์žฅ์†Œ ๊ฐ„์˜ ๋น„๊ต

$ git diff <๋น„๊ต๋Œ€์ƒ branch์ด๋ฆ„> origin/<branch ์ด๋ฆ„>

5) branch ๊ฐ„์˜ ๋น„๊ต

$ git diff <๋น„๊ต๋Œ€์ƒ branch ์ด๋ฆ„> <๊ธฐ์ค€ branch ์ด๋ฆ„>

3. ์›๊ฒฉ์ €์žฅ์†Œ(GitHub)๋ฅผ ์ด์šฉํ•˜์—ฌ ํ˜‘์—…ํ•˜๊ธฐ

๋กœ์ปฌ๊ณผ ์›๊ฒฉ์˜ ์ƒํ˜ธ์ž‘์šฉ

Branch ๊ฐœ๋…์„ ์›๊ฒฉ์ €์žฅ์†Œ (GitHub)์— ์ ‘๋ชฉ์‹œ์ผœ ์‹ค์งˆ์ ์ธ ํ˜‘์—…์„ ์ด๋ฃจ๊ธฐ

1) git remote : ์›๊ฒฉ์ €์žฅ์†Œ์— ์กฐํšŒ(์ถ”๊ฐ€) ํ•˜๊ธฐ

๋‚ด ๋กœ์ปฌ repository์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ณ  ์žˆ๋Š” (ํ˜น์€ ํ•  ์ˆ˜ ์žˆ๋Š”) ์›๊ฒฉ ์ €์žฅ์†Œ๋“ค์˜ ๋ชฉ๋ก์„ ์กฐํšŒ

๋‹จ์ถ•์ด๋ฆ„๊ณผ URL ๊ฐ™์ด ๋ณด๊ธฐ
$ git remote -v`
๊ธฐ์กด ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒˆ ์›๊ฒฉ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€
$ git remote add <๋‹จ์ถ•์ด๋ฆ„> <url>
<url>์— ์žˆ๋Š” ์›๊ฒฉ์ €์žฅ์†Œ๋ฅผ origin์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ
$ git remote add origin <url>

๋“ฑ๋กํ•œ ์›๊ฒฉ์ €์žฅ์†Œ๋ฅผ ์ง€์šฐ๋Š” ๋ช…๋ น์–ด (remove์˜ ์•ฝ์ž)

$ git remote rm <๋‹จ์ถ•์ด๋ฆ„>

2) git push : ์›๊ฒฉ์ €์žฅ์†Œ์— ๋ฐ€์–ด๋„ฃ๊ธฐ

$ git push -u origin main

3) git pull : ์›๊ฒฉ์ €์žฅ์†Œ ๊ฐ–๊ณ  ์™€์„œ ํ•ฉ์น˜๊ธฐ

$ git pull origin main

origin์„ ๋‚ด repository์˜ main ๋ธŒ๋žœ์น˜๋กœ ๊ฐ–๊ณ ์™€๋ผ (merge)

4) git fetch : ์›๊ฒฉ์ €์žฅ์†Œ ์ผ๋‹จ ๊ฐ–๊ณ ๋งŒ ์˜ค๊ธฐ

git fetch origin

5) git clone : ์›๊ฒฉ์ €์žฅ์†Œ ๋ณต์‚ฌํ•˜๊ธฐ

$ git clone <url>

ํ˜‘์—…์˜ ์„ธ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค

1) ๋‚ด ๋กœ์ปฌ ์ €์žฅ์†Œ๋Š” ๋ณ€ํ–ˆ๋Š”๋ฐ ์›๊ฒฉ ์ €์žฅ์†Œ๋Š” ๋ณ€ํ•จ ์—†๋Š” ๊ฒฝ์šฐ

๊ทธ๋ƒฅ pushํ•˜๋ฉด ๊ทธ๋งŒ

2) ๋‚ด ๋กœ์ปฌ ์ €์žฅ์†Œ๋Š” ๋ณ€ํ•จ ์—†๋Š”๋ฐ ์›๊ฒฉ ์ €์žฅ์†Œ๋Š” ๋ณ€ํ•œ ๊ฒฝ์šฐ

$ git pull origin main

์œผ๋กœ ๋™๊ธฐํ™”๋ฅผ ์‹œํ‚จ ๋‹ค์Œ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ํ›„, pushํ•˜๊ธฐ

3) ๋‚ด ๋กœ์ปฌ ์ €์žฅ์†Œ๋Š” ๋ณ€ํ–ˆ๋Š”๋ฐ ์›๊ฒฉ ์ €์žฅ์†Œ๋Š” ๋ณ€ํ•œ ๊ฒฝ์šฐ

๊ฐ€์žฅ ๊ณจ์น˜ ์•„ํ”ˆ ์ƒํ™ฉ์ธ ๋™์‹œ์— ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ

Solution 1. rebase

: ํ˜„์žฌ ๋‚ด๊ฐ€ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” branch์˜ base๋ฅผ ์˜ฎ๊ธด๋‹ค.

Solution 2. pull request
  1. ํ˜‘์—… ๋Œ€์ƒ repository๋ฅผ fork ํ•œ๋‹ค.
  2. forkํ•œ ๋‚˜์˜ repository๋ฅผ clone ํ•œ๋‹ค.
  3. ๋กœ์ปฌ์—์„œ ์ƒˆ branch๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  4. ์ด branch์—์„œ ์“ฐ๊ณ  ์‹ถ์€ ์ฝ”๋“œ๋ฅผ ๋ง˜๊ป ์ž‘์„ฑํ•œ๋‹ค.
  5. ์ด branch์—์„œ commit์„ ํ•œ๋‹ค.
  6. ์ฝ”๋“œ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ fork ํ•ด์˜จ repository์˜ ๊ทธ branch์— push
    • $ git push origin newbranch
      
  7. ์›๊ฒฉ์ €์žฅ์†Œ์— pull request๋ฅผ ๋ณด๋‚ธ๋‹ค.
    • ๋กœ์ปฌ ๊ด€์ ์—์„  push์ง€๋งŒ, ์›๊ฒฉ์ €์žฅ์†Œ ๊ด€์ ์—์„œ๋Š” pull์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„์ด pull request์ด๋‹ค.
    • GitHub์—์„œ Compare & pull request ๋ฒ„ํŠผ์„ ๋ˆ„๋ฆ„์œผ๋กœ์„œ ๊ฐ€๋Šฅ
  8. ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๊ด€๋ฆฌ์ž๊ฐ€ ์Šน์ธ์„ ํ•ด์ฃผ๋ฉด, merge ๋จ์œผ๋กœ์„œ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜์˜๋œ๋‹ค.
  9. ์Šน์ธ๋œ ํ›„์—๋Š” branch๋ฅผ GitHub ์›นํŽ˜์ด์ง€์—์„œ ์ง์ ‘ ์ง€์šฐ๊ฑฐ๋‚˜, $ git branch -d newbranch์˜ ๋ช…๋ น์–ด๋กœ ์ง€์›Œ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
    • branch๊ฐ€ ๋งŽ์•„๋ดค์ž ์ข‹์„ ๊ฒƒ์ด ์—†๊ธฐ ๋•Œ๋ฌธ.

์ฐธ๊ณ