Github) Rebase๋ž€?

allzeroyouยท2024๋…„ 3์›” 7์ผ

์ž˜ ์จ๋ณด์ž GitHub

๋ชฉ๋ก ๋ณด๊ธฐ
4/4

๐Ÿšจ ๋ฌธ์ œ ์ƒํ™ฉ: ์ฒ˜์Œ ์ธํ…”๋ฆฌ์ œ์ด ํ”Œ์ ์„ github์— ์˜ฌ๋ฆฌ๋ ค๊ณ  github์—์„œ ์ƒˆ๋กœ์šด ๋ ˆํฌ๋ฅผ ๋งŒ๋“ค๊ณ (readme ์ถ”๊ฐ€ํ•ด๋†ˆ)์ธํ…”๋ฆฌ์ œ์ด์—์„œ ์ปค๋ฐ‹ํ•˜๋ ค๊ณ  ํ• ๋•Œ, ์˜ค๋ฅ˜ ๋ฐœ์ƒ.

TL;DR
pull ์˜ต์…˜์„ rebase๋กœ ํ•œ ํ›„, git branch --set-upstream-to=origin/main main๋กœ ๋กœ์ปฌ์ด ์›๊ฒฉ์˜ branch๋ฅผ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒํ•˜๋ฉด push ์„ฑ๊ณต!

๋ฌธ์ œ ์ƒํ™ฉ์„ ๋งŒ๋‚˜๊ธฐ ์ „๊นŒ์ง€ ์‚ฌ์šฉํ•œ ๋ช…๋ น์–ด

git init
git remote add origin https://github.com/allzeroyou/java-test.git
git status
git checkout -b main // main ๋ธŒ๋žœ์น˜๋กœ ๋ณ€๊ฒฝ
git add .
git commit -m "intellij commit"
// ์•„์ฐจ github ๋ ˆํฌ์— readme ์ถ”๊ฐ€ํ•ด๋†จ์ง€..
// push ์ „์— pull ํ•ด์•ผ๊ฒ ๋‹ค.
git pull origin main

๊ทธ๋Ÿฌ๊ณ  ๋‚˜๋‹ˆ๊นŒ pull ์ด ์•ˆ๋˜์—ˆ๋Š”๋ฐ,

  • ๊ธฐ์กด pull์˜ ๊ฒฝ์šฐ git fetch ์™€ merge๋ฅผ ํ•ฉ์นœ ๋ช…๋ น์–ด.
  • ๊ทธ์ค‘ merge์˜ ๋ฐฉ์‹์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ.
  • ๊ฐ ์˜ต์…˜์„ ์‚ดํŽด๋ณด๊ณ  ์ด๋Ÿฐ ์ƒํ™ฉ์— ๋‹นํ™ฉํ•˜์ง€ ์•Š์ž..!

๊ธฐ์กด pull ๋ฐฉ์‹

  • ๊ธฐ์กด pull์˜ ๊ฒฝ์šฐ pull์„ ๋ฐ›์œผ๋ฉด ๋ถˆํ•„์š”ํ•œ merge commit ์ƒ๊น€.
  • ๋งˆ์น˜ 3-way-merge์™€ ๊ฐ™์€ ๋ชจ์–‘์ƒˆ์ž„.
  • ๊ทธ๋ฆผ์—์„œ ๋นจ๊ฐ„์ƒ‰ commit์ด ๋ฐ”๋กœ ๋ถˆํ•„์š”ํ•œ merge commit์ž„.

๐Ÿ’š 1๋ฒˆ์งธ ์˜ต์…˜: git pull โ€”ff -only

  • pull ํ•˜๋ ค๋Š” ์›๊ฒฉ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜์™€ ๋กœ์ปฌ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜๊ฐ€ fast-forward ๊ด€๊ณ„์ผ๋•Œ๋งŒ pull ํ—ˆ์šฉ.

  • ๋‘ ๋ธŒ๋žœ์น˜๊ฐ€ fast-forward ๊ด€๊ณ„๋ผ๋Š” ๊ฑด, ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์˜๋ฏธ

  • ๋‘ ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐˆ๋ผ์ง„ commit์„ ๊ธฐ์ค€์œผ๋กœ

    1. ๋กœ์ปฌ ์ €์žฅ์†Œ์—๋งŒ ์ƒˆ๋กœ์šด commit์ด ์žˆ๊ณ , ์›๊ฒฉ์—๋Š” ์—†์„๋•Œ
    2. ์›๊ฒฉ ์ €์žฅ์†Œ์—๋งŒ ์ƒˆ๋กœ์šด commit์ด ์žˆ๊ณ , ๋กœ์ปฌ์—๋Š” ์—†์„๋•Œ.

โ†’ ๋งŒ์•ฝ ์›๊ฒฉ์ €์žฅ์†Œ์— ์ƒˆ๋กœ์šด commit์ด ์กด์žฌํ•˜๋Š”๋ฐ git pull์„ ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๋กœ์ปฌ์ €์žฅ์†Œ์—์„œ ์ƒˆ๋กœ์šด commit ํ–ˆ๋‹ค๋ฉด, git์€ pull ํ—ˆ์šฉ ์•ˆํ•จ.

์‚ฌ์ง„: ์ธํ…”๋ฆฌ์ œ์ด์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ํ˜„์žฌ Local๊ณผ remote ๋ธŒ๋žœ์น˜.

1๋ฒˆ ์˜ต์…˜์˜ ๊ฒฝ์šฐ, ํ˜„์žฌ ๋กœ์ปฌ, ์›๊ฒฉ ๋ชจ๋‘ ์ปค๋ฐ‹ ๋‚ด์—ญ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— -ff ์˜ต์…˜์€ ์•ˆ ๋จน์—ˆ์„ ๊ฒƒ์ด๋‹ค(์‹ค์ œ๋กœ๋„ ์•ˆ๋จน์Œ)

๐Ÿ’š 2๋ฒˆ์งธ ์˜ต์…˜: git pull โ€”rebase

pull ํ• ๋•Œ rebase๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘.

rebase๋ž€?

์ƒˆ ๋ธŒ๋žœ์น˜๊ฐ€ ์‹œ์ž‘๋œ ๋ถ„๊ธฐ์  commit ์กด์žฌ.

์ด ๋ถ„๊ธฐ์ ์„ ๊ธฐ์ค€ ๋ธŒ๋žœ์น˜์˜ ๊ฐ€์žฅ ์ตœ๊ทผ commit์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—….

-> ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์˜ ์‹œ์ž‘์ ์„ ์›๊ฒฉ ๋ธŒ๋žœ์น˜์˜ ๋งˆ์ง€๋ง‰ commit์œผ๋กœ ์˜ฎ๊น€.

  • ์ด ๊ฒฝ์šฐ git history๊ฐ€ ๊น”๋”ํ•ด์ง„๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋ถ€์ฃผ์˜ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ณ„๋„์˜ ์•Œ๋žŒ์—†์ด git history๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ.

๊ทธ๋ž˜! rebase๋ฅผ ์จ๋ณด์ž!

์•ˆ๋˜๋Š”๋ฐ?
ํ˜„์žฌ ๋ธŒ๋žœ์น˜์— ์ถ”์  ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ผ๋Š”๋ฐ.. ๋‚˜๋Š” main์ด๋ผ๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ์žˆ๋‹จ ๋ง์ด์ง€???

โœจ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•:

โ†’main์€ ๋กœ์ปฌ์—์„œ์˜ ๋ธŒ๋žœ์น˜์ด๊ณ , ์›๊ฒฉ์ €์žฅ์†Œ๋Š” origin/main์ด๋‹ค.

์ฆ‰, ์ด ๋‘˜์ด ์„œ๋กœ๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ผ์–ด๋‚œ ์˜ค๋ฅ˜์ด๋‹ค!

๋”ฐ๋ผ์„œ,

git branch --set-upstream-to=origin/main main

์„ ํ†ตํ•ด ๋กœ์ปฌ์˜ main ๋ธŒ๋žœ์น˜๊ฐ€ origin/main์„ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๊ณ , push๊นŒ์ง€ ํ•˜๋‹ˆ๊นŒ...

์ปค๋ฐ‹ ์„ฑ๊ณต~

์ฐธ๊ณ ํ•œ ๊ธ€

git pull ์‹œ ๋ฐœ์ƒํ•˜๋Š” warning ํ•ด๊ฒฐํ•˜๊ธฐ(Need to specify how to reconcile divergent branches)

git pull ๊ฐ€ ์•ˆ๋จน์„๋•Œ

profile
๋ชจ๋“  ๊ฑด zero ๋ถ€ํ„ฐ, ์ฐจ๊ทผ์ฐจ๊ทผ ํ—›๋‘˜ํ—›๋‘˜

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