Git

Git Workflow

1 . ์ƒˆ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด clone ํ•ด์คŒ

git clone <project url>

2 . ๋ชจ๋“  ๊ธฐ๋Šฅ ๋ถ„๊ธฐ๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ตœ์‹  ์ฝ”๋“œ ์ƒํƒœ์—์„œ ์ƒ์„ฑ

git checkout main

git fetch origin

git reset --hard origin/main

ํ˜น์€

git pull origin main

3 . ์ƒˆ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ์— ์•ž์„œ ๊ฒฉ๋ฆฌ๋œ ์ž‘์—… ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋กœ ์ฒดํฌ์•„์›ƒ ํ•œ๋‹ค.

git checkout -b <branchname>

ํ˜น์€

git branch <branchname>

git checkout <branchname>

4 . issue ํ™•์ธ ๋ฐ ํ•ด๋‹น ์ž‘์—… ์ง„ํ–‰

git add <file1> <file2> ...

git commit -m "commit message"

5 . ์›๊ฒฉ branch์— ํ‘ธ์‹œ

git push -u origin <branchname>

6 . Github ์ €์žฅ์†Œ์—์„œ Compare & Pull Request ๋ฒ„ํŠผ์„ ํ†ตํ•ด Pull Request ์ƒ์„ฑ

7 . PR ์š”์ฒญ์€ ๊ฒ€ํ† ์ž๊ฐ€ ์ฝ”๋“œ ๋ณ€๊ฒฝ๋‚ด์—ญ์„ ํ™•์ธํ•˜๊ณ  Merge ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •

8 . Merge ์ดํ›„ ๋™๊ธฐํ™” ๋ฐ branch๋ฅผ ์ œ๊ฑฐ

โœจ reference

Github Project Management

Github๋ฅผ ์ด์šฉํ•ด์„œ Project Management ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฐ ์ „์ฒด์ ์ธ ํ”„๋กœ์„ธ์Šค. (issue ๊ด€๋ฆฌ, ์ผ์ • ๊ด€๋ฆฌ, ์ฝ”๋“œ๋ฆฌ๋ทฐ, ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ ๋“ฑ)

โœจ 1 . ์ „์ฒด ํ”Œ๋กœ์šฐ

  1. Issue ๋ฐœ๊ธ‰

  2. Issue ์ž‘์—…

  3. Pull Request Code Review ์ง„ํ–‰

  4. Issue ๋ฐ˜์˜

โœจ 2 . Issue

  • Issue ๋ฐœํ–‰

๋ชจ๋“  ํ™œ๋™ ๋‚ด์—ญ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋ฅผ ํ…Œ๋ฉด ์ƒˆ๋กœ ์ถ”๊ฐ€๋  ๊ธฐ๋Šฅ, ๊ฐœ์„  ํ•ด์•ผํ•  ๊ธฐ๋Šฅ, ๋ฒ„๊ทธ ๋“ฑ์ด ์žˆ๋‹ค

  • Issue template

Issue๋ฅผ ๋“ฑ๋กํ•  ํ…œํ”Œ๋ฆฟ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค

https://github.com/cheese10yun/github-project-management#issue-template

  • Issue ์ž‘์—…

  • Assignees : ํ•ด๋‹ฌ ์ž‘์—…์˜ ๋‹ด๋‹น์ž

  • Labels : ํ•ด๋‹น ์ž‘์—…์˜ ์„ฑ๊ฒฉ

  • Milestone : ํ•ด๋‹น ์ž‘์—…์ด ์†ํ•œ ํŒŒํŠธ

  • Milestone :

Sprint๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋„๊ตฌ๋กœ, Due Date๋ฅผ ์„ค์ •ํ•œ ํ›„ ํ•ด๋‹น ๊ธฐ๊ฐ„ ๋™ํ•œ ์ˆ˜ํ–‰ํ•  Issue๋“ค์„ ๋“ฑ๋กํ•ด ๋†“๊ณ  ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

โœจ 3 . Pull Request

  • PUll Request ์ƒ์„ฑ

Github ํƒญ์—์„œ New Pull Request ๋ฒ„ํŠผ์„ ํด๋ฆญs

โœจ 4 . Code Review

โœจ 5 . Wiki

ํ”„๋กœ์ ํŠธ์˜ ๋ฌธ์„œ๋ฅผ ๊ด€๋ฆฌ

โœจ 6 . Project

๋ฐœ๊ธ‰๋œ ๋งŽ์€ ์ด์Šˆ๋“ค์„ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์œ„ํ•œ UI๋ฅผ ์ œ๊ณต

โœจ reference

Git Style Guide

โœจ 1. Branches

Perform work in a feature branch.

  • main

  • feature/\*

1.1 main

> ์ œํ’ˆ์œผ๋กœ ์ถœ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ๋ธŒ๋žœ์น˜

> ๋ฒ„์ „๊ด€๋ฆฌ๊ฐ€ ํ•„์š”๋˜๋Š” ๊ฒฝ์šฐ master/1.0.0 ์ด๋Ÿฌํ•œ ํ˜•์‹์œผ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

1.2 feature/\*

> ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜

1.3 ์ƒ์„ธ ๊ทœ์น™

  • main ๋ธŒ๋žœ์น˜๋Š” feature/\* ๋ธŒ๋žœ์น˜์— ์˜ํ•ด merge ๋˜์–ด ์ˆ˜์ •๋˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • feature ๋ธŒ๋žœ์น˜์—์„œ main ๋ธŒ๋žœ์น˜์— merge ํ•  ๋•Œ,

๋ฐ˜๋“œ์‹œ main ๋ธŒ๋žœ์น˜์— ์žˆ๋Š” ๋‚ด์šฉ์„ pull ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

(์ถฉ๋Œ์‹œ ๋กœ์ปฌ์—์„œ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ)

โœจ 2. Commits

Writing good commit messages

2.1 ๊ตฌ์กฐ

`issue(์˜ต์…˜ ex MP-3) type(์˜ต์…˜): subject(ํ•„์ˆ˜)

body(์˜ต์…˜)`

  • issue: ๊ด€๋ จ๋œ ์ด์Šˆ ๋ฒˆํ˜ธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • type: ์–ด๋–ค ์˜๋„๋กœ ์ปค๋ฐ‹ํ–ˆ๋Š”์ง€๋ฅผ type์— ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

  • subject: ์ตœ๋Œ€ 50๊ธ€์ž๊ฐ€ ๋„˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ  ๋งˆ์นจํ‘œ๋Š” ์ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜๋ฌธ์œผ๋กœ ํ‘œ๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ ๋™์‚ฌ(์›ํ˜•)์„ ๊ฐ€์žฅ ์•ž์— ๋‘๊ณ  ์ฒซ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

  • body: ๊ธด ์„ค๋ช…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ•œ์ค„์— ์ตœ๋Œ€ 75๊ธ€์ž๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ํ–ˆ๋Š”์ง€๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฌด์—‡์„ ์™œ ํ–ˆ๋Š”์ง€ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

2.2 Type

Type์€ ํ•ญ์ƒ ์˜๋ฌธ ์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • feat : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€

  • fix : ๋ฒ„๊ทธ ์ˆ˜์ •

  • docs : ๋ฌธ์„œ์˜ ์ˆ˜์ •

  • style : UI๋ฅผ ์ถ”๊ฐ€/๋ณ€๊ฒฝ ํ•˜๊ฑฐ๋‚˜ ์Šคํƒ€์ผ ๊ด€๋ จ ์ˆ˜์ •

  • refactor : ์ฝ”๋“œ๋ฅผ ๋ฆฌํŽ™ํ† ๋ง

  • test : Test ๊ด€๋ จํ•œ ์ฝ”๋“œ์˜ ์ถ”๊ฐ€, ์ˆ˜์ •

  • chore : ๊ธฐ๋Šฅ/ํ…Œ์ŠคํŠธ, ๋ฌธ์„œ, ์Šคํƒ€์ผ, ๋ฆฌํŒฉํ† ๋ง ์™ธ์— ๋ฐฐํฌ, ๋นŒ๋“œ์™€ ๊ฐ™์ด ํ”„๋กœ์ ํŠธ์˜ ๊ธฐํƒ€ ์ž‘์—…๋“ค์— ๋Œ€ํ•ด ์ถ”๊ฐ€/์ˆ˜์ •

โœจ 3. Pull Request (Merge)

3.1 ๊ทœ์น™

  • main ๋ธŒ๋žœ์น˜๋กœ์˜ merge๋Š” feature/\* ๋ธŒ๋žœ์น˜์— ์˜ํ•ด์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • merge์‹œ merge๊ฐ€ ๋˜๋Š” ๋ธŒ๋žœ์น˜์—์„œ pull์„ ๋จผ์ €ํ•˜๊ณ  ์ถฉ๋Œ์ด ์žˆ๋‹ค๋ฉด ํ•ด๊ฒฐํ•œ ๋’ค merge๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • merge๋Š” github pull request์—์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

โœจ reference

Git rebase & merge

Git delete branch

โœจ local

โœจ remote

git push origin --delete {branch-name}

Git์— ์ž˜๋ชป ์˜ฌ๋ผ๊ฐ„ ํŒŒ์ผ ์‚ญ์ œ

โœจ ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ํŒŒ์ผ ์‚ญ์ œ

git rm [File Name]
git rm --cached [File Name]

์˜ˆ์‹œ

git rm --cached .DS_Store
git rm --cached -r .idea/

โœจ .gitignore ์„ค์ •

์œ„ ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ gitignore ์„ค์ •

โœจ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์ ์šฉ

git commit -m "chore : Delete .idea/"
git push origin main

โœจ reference

Git add, git commit, git push ๋˜๋Œ๋ฆฌ๊ธฐ

โœจ git add ์ทจ์†Œ

ํŒŒ์ผ ์ƒํƒœ๋ฅผ Unstage๋กœ ๋ณ€๊ฒฝ

git add *
git status
git reset HEAD [File Name]
git status

โœจ git commit ์ทจ์†Œ

git log

// ๋ฐฉ๋ฒ• 1 : 
// commit์„ ์ทจ์†Œ
// ํ•ด๋‹น ํŒŒ์ผ๋“ค์€ staged ์ƒํƒœ๋กœ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณด์กด
git reset --soft HEAD^

// ๋ฐฉ๋ฒ• 2 : 
// commit์„ ์ทจ์†Œ
// ํ•ด๋‹น ํŒŒ์ผ๋“ค์€ unstaged ์ƒํƒœ๋กœ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณด์กด
git reset mixed HEAD^
git reset HEAD^
git reset HEAD~2 // ๋งˆ์ง€๋ง‰ 2๊ฐœ์˜ commit์„ ์ทจ์†Œ

// ๋ฐฉ๋ฒ• 3
// commit์„ ์ทจ์†Œ
// ํ•ด๋‹น ํŒŒ์ผ๋“ค์€ unstaged ์ƒํƒœ๋กœ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์‚ญ์ œ
git reset --hard HEAD^

โœจ git commit message ๋ณ€๊ฒฝ

git commit --amend

โœจ reset ์˜ต์…˜

  • soft : index ๋ณด์กด(addํ•œ ์ƒํƒœ, staged ์ƒํƒœ), ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๋ณด์กด. ์ฆ‰ ๋ชจ๋‘ ๋ณด์กด.

  • mixed : index ์ทจ์†Œ(addํ•˜๊ธฐ ์ „ ์ƒํƒœ, unstaged ์ƒํƒœ), ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๋ณด์กด (๊ธฐ๋ณธ ์˜ต์…˜)

  • hard : index ์ทจ์†Œ(addํ•˜๊ธฐ ์ „ ์ƒํƒœ, unstaged ์ƒํƒœ), ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ์‚ญ์ œ. ์ฆ‰ ๋ชจ๋‘ ์ทจ์†Œ.

์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋งˆ์ง€๋ง‰ commit ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

git reset --hard HEAD

โœจ git push ์ทจ์†Œ

์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž์‹ ์˜ local์˜ ๋‚ด์šฉ์„ remote์— ๊ฐ•์ œ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ ํ•จ.

๋˜๋Œ์•„๊ฐ„ commit ์ดํ›„์˜ ๋ชจ๋“  commit ์ •๋ณด๊ฐ€ ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜.

ํŠนํžˆ, ํ˜‘์—… ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํŒ€์›๊ณผ ์ƒ์˜ ํ›„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ

  1. ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ commit์„ ๋˜๋Œ๋ฆผ

// 1.1 : 
// ๊ฐ€์žฅ ์ตœ๊ทผ์˜ commit์„ ์ทจ์†Œํ•˜๊ณ  ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ ๋˜๋Œ๋ฆผ
git reset HEAD^

// 1.2 : 
// ์›ํ•˜๋Š” ์‹œ์ ์œผ๋กœ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ ๋˜๋Œ๋ฆผ

// 1.2.1
git reflog 
// or
git log -g

//1.2.2
git reset HEAD@{number} 
// or
git reset [commit id]
  1. ๋˜๋Œ๋ ค์ง„ ์ƒํƒœ์—์„œ ๋‹ค์‹œ commmit

git commit -m "chore : Revert commit"
  1. ์›๊ฒฉ ์ €์žฅ์†Œ์— ๊ฐ•์ œ๋กœ push

git push origin [Branch Name] -f
// or
git push origin +[Branch Name]

โœจ reference

Git commit ๋˜๋Œ๋ฆฌ

Git sub module

Git stash

Git remote repository ๋ณ€๊ฒฝ

Git fork and PR

Git ๊ด€๊ณ„ ์—†๋Š” ์ปค๋ฐ‹ ๋ณ‘ํ•ฉ ๊ฑฐ๋ถ€

Git rebase

Git branch ์ „๋žต

Github repo ๊ด€๋ฆฌ

  • sub module

  • sub tree

  • ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์—์„œ ๊ฐ๊ฐ git clone git clone

ref

Etc

โœจ command line์—์„œ ๋ฉ”์„ธ์ง€์™€ ์„ค๋ช… ๊ฐ™์ด ์“ฐ๊ธฐ

git commit -m "Title" -m "Description ..........";

โœจ github submodule ์‚ฌ์šฉ

โœจ reference

Last updated