Github - ynjch97/YNJCH_WIKI GitHub Wiki

1. ๊ด€๋ จ ๋งํฌ

2. ์—ฐ๊ฒฐ

  • git bash ๋กœ ์ตœ์ดˆ ์—ฐ๊ฒฐ
  • .git ํด๋” ์ƒ์„ฑ ๋ฐ remote ์ €์žฅ์†Œ ์—ฐ๊ฒฐ
    • ์ €์žฅ์†Œ์˜ Wiki ํƒญ๊ณผ ์—ฐ๊ฒฐํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ : https://github.com/ynjch97/YNJCH_WIKI.wiki.git
# global ์„ค์ •
git config --global user.name "[์ด๋ฆ„]"
git config --global user.email [์ด๋ฉ”์ผ]

# local ์„ค์ •
git config --local user.name "[์ด๋ฆ„]"
git config --local user.email [์ด๋ฉ”์ผ]

git init
git remote add origin [git ์ฃผ์†Œ]

2-1. ์ž๊ฒฉ ์ฆ๋ช…

2-2. ์—…๋ฐ์ดํŠธ

  • git remote update : ๋“ฑ๋ก๋œ ๋ชจ๋“  ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ •๋ณด๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์—…๋ฐ์ดํŠธ
$ git remote update

gremote: Enumerating objects: 12695, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 12695 (delta 1), reused 3 (delta 1), pack-reused 12691
Receiving objects: 100% (12695/12695), 55.69 MiB | 21.17 MiB/s, done.
Resolving deltas: 100% (2789/2789), done.
From https://github.com/ynjch97/TestProj
 * [new branch]      TestProjmain   -> origin/TestProjmain
 * [new branch]      TestProjquasar -> origin/TestProjquasar

2-3. Pull/Push ํ…Œ์ŠคํŠธ

  • main Branch ๋กœ๋ถ€ํ„ฐ Pull ๋ฐ›๊ณ , Push ํ•˜๊ธฐ
git pull origin main
git add [์˜ฌ๋ฆด ํŒŒ์ผ๋ช…]
git commit -m "[์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€]"
git push -u origin main

3. Pull

  • Pull = Fetch + Merge
  • ํŠน์ • Branch์—์„œ Pull : git pull origin [Branch๋ช…]

3-1. ํŠน์ • ํด๋”๋งŒ Pull

  • https://y00n-lee.tistory.com/39
  • ์„ ํƒํ•œ ํŠน์ • ํด๋” Pull ๋ฐ›๋Š” ์ˆœ๊ฐ„ ๋‹ค๋ฅธ ํด๋” ๋ฐ ํŒŒ์ผ๋“ค์€ ์‚ฌ๋ผ์ง
  • Sparse checkout : ์ €์žฅ์†Œ์˜ ํŠน์ • ํด๋”๋‚˜ ํŒŒ์ผ๋งŒ ๋ณด์ด๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ
  • sparseCheckout ํ™œ์„ฑํ™” : git config core.sparseCheckout true
  • Pull ๋ฐ›๊ณ  ์‹ถ์€ ํŠน์ • ํด๋”๋ช… ์„ ํƒ : echo "[ํด๋”๋ช…]" >> .git/info/sparse-checkout
    • ~\.git\info ๊ฒฝ๋กœ์— sparse-checkout ํŒŒ์ผ ์ƒ์„ฑ๋œ ๊ฒƒ ํ™•์ธ
  • Pull : git pull origin main

4. Add

  • ์—…๋กœ๋“œ ํ•  ํŒŒ์ผ add : git add [์˜ฌ๋ฆด ํŒŒ์ผ๋ช…]
  • add ์ด์ „์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ : git reset HEAD

4-1. ์‚ญ์ œ๋œ ํŒŒ์ผ Commit

  • ํ•„์š” ์—†๋Š” ํŒŒ์ผ ์ •๋ฆฌ๋ฅผ ์œ„ํ•œ ์˜ต์…˜ -u (์‚ญ์ œํ•œ ํŒŒ์ผ ๋ฐ˜์˜ ์‹œ)
git add -u [ํŒŒ์ผ๋ช… ๋˜๋Š” *]

4-2. ๋ฐ˜์˜ ์ƒํƒœ ํ™•์ธ

git status

5. Commit & Push

  • Commit : git commit -m "[์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€]"
  • Push : git push -u origin TestProjmain

5-1. ์ˆ˜์ •/์‚ญ์ œ๋œ ํŒŒ์ผ๋งŒ Commit

  • ์ˆ˜์ • ๋˜๋Š” ์‚ญ์ œ๋œ ํŒŒ์ผ๋งŒ Commit : ์˜ต์…˜ -a
    • ํŒŒ์ผ๋ช… ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ์—๋Š” add ์— -u ์˜ต์…˜์„ ๋„ฃ์ง€ ์•Š์€ ์ฑ„ commit ์— -a ์˜ต์…˜์„ ๋„ฃ์–ด์ค˜์•ผ ํ•จ
git commit -a -m "[์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€]"

5-2. ๋ˆ„๋ฝ๋˜๋Š” ํŒŒ์ผ ๋ฐœ์ƒ

  • .gitignore ์— ๋“ฑ๋กํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ ๋ˆ„๋ฝ๋œ ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด, git bash ์—์„œ add ์ˆ˜ํ–‰
  • .gitignore ํŒŒ์ผ ํ™•์ธํ•˜๊ธฐ : ./.gitignore
  • ์•„๋ž˜ ๋‚ด์šฉ ํ™•์ธ๋จ
$ git add TestProj/node_modules
The following paths are ignored by one of your .gitignore files:
TestProj/node_modules
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"

5-2-1. Use -f if you really want to add them

  • LF will be replaced by CRLF in ํ•ด๊ฒฐ ๋ฐฉ์•ˆ
  • git add TestProj/node_modules ๋ช…๋ น์–ด ์ž…๋ ฅ
  • warning: in the working copy of 'TestProj/node_modules/prettier/esm/parser-postcss.mjs', LF will be replaced by CRLF the next time Git touches it
  • git config --global core.autocrlf true ๋ช…๋ น์–ด ์ž…๋ ฅ ํ›„ ๋‹ค์‹œ add
    • core.autocrlf = true (CRLF > LF ๋ณ€๊ฒฝ)
    • core.autocrlf = false (๊ธฐ๋ณธ ์„ค์ •, ํ”Œ๋žซํผ(OS) ์ƒ๊ด€์—†์ด ์ค„๋ฐ”๊ฟˆ์— ๋Œ€ํ•œ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ์ธ์‹ํ•ด ์ €์žฅ (๋ฌธ์ œ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ))
    • core.autocrlf = input (LF๋ฅผ line ending์œผ๋กœ ์‚ฌ์šฉ)
# ์ดํ›„์—๋„ ๋™์ผํ•œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ false ๋กœ ๊บผ๋ฒ„๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ํ•จ
git config --global core.autocrlf true
git reset HEAD
git add -f TestProj/.quasar/*
git add -f TestProj/node_modules/*

๐Ÿ”ถ LF, CRLF

  • LF(Line-Feed)
    • Mac, Linux (Unix ๊ณ„์—ด) ์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž์—ด = \n
    • ASCII ์ฝ”๋“œ = 10
  • CR(Carriage-Return)
    • Mac ์ดˆ๊ธฐ ๋ชจ๋ธ ์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž์—ด = \r
    • ASCII ์ฝ”๋“œ = 13
  • CRLF (Carriage-Return+Line-Feed)
    • Windows, DOS ์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž์—ด = \r\n
    • CR(\r) + LR(\n) ๋‘ ๋™์ž‘์„ ํ•ฉ์ณ์„œ (\r\n)

5-3. Commit Conflict ํ•ด๊ฒฐ

  • Commit > Pull > Conflict ๋ฐœ์ƒ ์‹œ
    • Commit ๊ฑด ์šฐํด๋ฆญ -> Reset -> HARD ์ดํ›„ Commit ๊ฑด์„ ๋‹ค์‹œ Push ํ›„ Pull ๋ฐ›์œผ๋ฉด ๋จ
  • Pull ์„ ์ทจ์†Œํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰
git reset HEAD^
git fetch --all (remote ์†Œ์Šค ๋ฐ›๊ธฐ)
git checkout origin/staging src/main/webapp/jsp/file_name.jsp (remote ์†Œ์Šค๋กœ overwrite)

6. Fetch

  • git fetch --all : ๋ชจ๋“  ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ชจ๋“  remote tracking branch๋ฅผ ์—…๋ฐ์ดํŠธ
  • VSCode > Source Control > Pull, Push > Git Fetch From All Remotes

7. Branch

  • ์›๊ฒฉ ์ €์žฅ์†Œ์™€ ๋กœ์ปฌ์˜ Branch ํ™•์ธ
# Branch ํ™•์ธ
git branch
# Branch ์ƒ์„ธ ํ™•์ธ
git branch -v 
# ์›๊ฒฉ ์ €์žฅ์†Œ Branch ํ™•์ธ
git branch -r

7-1. Branch ์ƒ์„ฑ ๋ฐ ์ด๋™

# ํŠน์ • Branch ๋กœ ์ด๋™
git checkout [๋ธŒ๋žœ์น˜๋ช…]
# Branch ์ƒ์„ฑ ๋ฐ ํ•ด๋‹น Branch ๋กœ ์ด๋™
git checkout -b [๋ธŒ๋žœ์น˜๋ช…]
# ์›๊ฒฉ ์ €์žฅ์†Œ Remote Branch ์— ์ƒ์„ฑ
git push origin [๋ธŒ๋žœ์น˜๋ช…]

# master Branch์—์„œ Branch ์ƒ์„ฑ
git branch [๋ธŒ๋žœ์น˜๋ช…] master 

# Local ๊ณผ ์›๊ฒฉ ์ €์žฅ์†Œ Branch ์—ฐ๋™
git branch --set-upstream-to origin/[Branch๋ช…] 

7-2. Branch ์‚ญ์ œ

# ๋กœ์ปฌ Branch ์‚ญ์ œ
git branch -D [๋ธŒ๋žœ์น˜๋ช…]
# ์›๊ฒฉ Branch ์‚ญ์ œ
git push origin --delete [๋ธŒ๋žœ์น˜๋ช…]

8. Merge

  • Git Branch ๋ฅผ ๋‹ค๋ฅธ Branch ๋กœ ํ•ฉ์น˜๋Š” ๊ณผ์ •
  • TestProjynjch Source Control > ยทยทยท > Branch > Merge Branch > orgin/TestProjmain
  • Push (Sync Changes ๋ฒ„ํŠผ) ์ˆ˜ํ–‰
  • git bash ๋ช…๋ น์–ด
# ํ•ด๋‹น Branch์™€ merge 
git merge TestProjmain
git push -u origin TestProjynjch

8-1. Branch ์™€ main ์†Œ์Šค Merge ํ•˜๊ธฐ

  • Merge ํ•  ๋•Œ ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ, diff Tool ์„ ์ด์šฉํ•˜์—ฌ ๋น„๊ต (WinMerge)
# main ์œผ๋กœ ์ด๋™
git checkout main 
# ํ•ด๋‹น Branch์™€ main ์„ merge 
git merge [๋ธŒ๋žœ์น˜๋ช…] 

8-2. ๋‹ค๋ฅธ Branch ์ปค๋ฐ‹ ๋‚ด์šฉ์„ ๋‚ด Branch ์— ๊ฐ€์ ธ์˜ค๊ธฐ

  • git cherry-pick : ๋‹ค๋ฅธ Branch์— ์žˆ๋Š” ์ปค๋ฐ‹์„ ์„ ํƒ์ ์œผ๋กœ ๋‚ด Branch์— ์ ์šฉ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด Branch ์˜ˆ์ œ
  • Branch Y์˜ ์ปค๋ฐ‹ ์ค‘ 76ae30ef์™€ 13af32cc ๋งŒ ๊ณจ๋ผ ํ˜„์žฌ Branch์ธ X์— ์ ์šฉ
git cherry-pick 76ae30ef 13af32cc
  • conflict ๋ฐœ์ƒ ์‹œ ๋‹ค์Œ ๋ช…๋ น์–ด ์‹คํ–‰
# Conflict๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  cherry-pick์„ ์ง„ํ–‰์‹œํ‚จ๋‹ค.
git cherry-pick --continue
# cherry-pick์„ ์ค‘๋‹จํ•˜๊ณ  ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ์•„๊ฐ„๋‹ค.
git cherry-pick --abort
  • merge commit์„ cherry-pick ํ•  ๋•Œ
git cherry-pick -m 1 <merge_commit_hash>

8-3. test Branch์—์„œ ์ž‘์—…ํ•œ ๊ฒƒ ์ค‘ ํŠน์ • ํŒŒ์ผ๋งŒ master ์— ๋ฐ˜์˜์‹œํ‚ค๊ธฐ

git checkout test 
git pull 
git checkout master
git pull 
git checkout origin/test src/main/java/com/ynjch/petmily/controller/user/UserControllor.java
git commit -m "[์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€]"
git push -u origin master

8-4. test Branch์—์„œ ์ž‘์—…ํ•œ ๊ฒƒ ์ค‘ ํŠน์ • ์ปค๋ฐ‹๋งŒ master ์— ๋ฐ˜์˜์‹œํ‚ค๊ธฐ

git checkout test 
git pull 
git checkout master
git cherry-pick 584a586
git commit -m "[์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€]"
git push -u origin master

9. .gitignore

  • .git ์ด ์žˆ๋Š” ์ตœ์ƒ์œ„ ๊ฒฝ๋กœ์— .gitignore ํŒŒ์ผ ์ƒ์„ฑ
# .gitignore ํŒŒ์ผ ์ƒ์„ฑ
TestProj/node_modules
TestProj/.quasar
.gitignore
  • ์•„๋ž˜์™€ ๊ฐ™์ด ํ™•์ธ ๊ฐ€๋Šฅ
$ ./.gitignore
./.gitignore: line 3: TestProj/node_modules: Is a directory
./.gitignore: line 4: TestProj/.quasar: Is a directory

9-1. ์บ์‹œ ์‚ญ์ œ ์ฒ˜๋ฆฌ

  • Repository์— ์ด๋ฏธ ํŒŒ์ผ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด .gitignore ์ ์šฉ์ด ์•ˆ๋  ์ˆ˜ ์žˆ์Œ
  • ์•„๋ž˜ git bash ์บ์‹œ ์‚ญ์ œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐ
git rm -r --cached .
git add .
git commit -m "Untrack files in .gitignore"
git push -u origin TestProjynjch

10. Tag

  • ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „ ๋“ฑ ์†Œ์Šค์ฝ”๋“œ์˜ ํŠน๋ณ„ํ•œ ๋ฒ„์ „์„ ๊ธฐ๋กํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉ
  • Git Tag ๊ด€๋ จ ๋ช…๋ น์–ด ์ •๋ฆฌ ๋งํฌ
  • Tag ์œ ํ˜•
    • Lightweight : ํŠน์ • ์ปค๋ฐ‹์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰
    • Annotated : Git ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์™„์ „ํ•œ ๊ฐ์ฒด๋กœ ์ €์žฅ๋˜์–ด ํƒœ๊ทธํ•œ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ, ๋‚ ์งœ, ํƒœ๊ทธ ๋ฉ”์‹œ์ง€ ๋“ฑ์„ ํ•จ๊ป˜ ์ €์žฅ
  • ์œ„์™€ ๊ฐ™์ด v1.0.0 Tag ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ~/releases/tag/v1.0.0 ๊ฒฝ๋กœ์—์„œ ๊ด€๋ จ ๋‚ด์šฉ ํ™•์ธ ๊ฐ€๋Šฅ

11. GitHub ํ˜‘์—…

11-1. ์›๋ณธ ์ €์žฅ์†Œ์™€ ๋™๊ธฐํ™”

  • Forkํ•œ ์ €์žฅ์†Œ๋Š” origin ์œผ๋กœ, ์›๋ณธ ์ €์žฅ์†Œ๋Š” upstream ์œผ๋กœ ์ €์žฅ์†Œ ๋“ฑ๋ก
git remote add upstream https://github.com/ynjch97/Stockid.git
git remote add origin https://github.com/KMJHere/Stockid.git
  • ๋‚˜์˜ ์›๊ฒฉ ์ €์žฅ์†Œ ์†Œ์Šค pull ๋ฐ main Branch ์„ ํƒ
git pull origin main
git checkout main
  • ์›๋ณธ ์ €์žฅ์†Œ์™€ ๋™๊ธฐํ™” ๋ฐ ๋‚˜์˜ ์ €์žฅ์†Œ์— merge
git fetch upstream main
git merge upstream/main

11-2. ์›๋ณธ ์ €์žฅ์†Œ์— Pull Request

  • ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ commit ๋ฐ push
  • GitHub > ๋‚˜์˜ Repository > New pull request
  • ์›๋ณธ Repository์˜ Branch ์„ ํƒ ๋ฐ ๋‚˜์˜ Repository Branch ์„ ํƒ ํ›„ Pull Request
  • ์ˆ˜๋ฝ์ด ๋˜๋ฉด ์œ„์˜ ๋™๊ธฐํ™” ๊ณผ์ • ๋ฐ˜๋ณต
  • ์ฐธ๊ณ  https://andamiro25.tistory.com/193

12. Eclipse

  • Git Repository ์— ์†Œ์Šค ์ปค๋ฐ‹ํ•˜๊ธฐ
    • Pull ๋ฐ›์€ ํ›„ Git Staging ์—์„œ Commit
    • ํ”„๋กœ์ ํŠธ ์šฐํด๋ฆญ > Team > Push Branch Staging
    • Team > Pull

13. VSCode

13-1. ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ

  • Commit Message Editor : ์—๋””ํ„ฐ ์ฐฝ์—์„œ ์ปค๋ฐ‹ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ
  • Git Graph : GIT ๊ทธ๋ž˜ํ”„ ๋ฐ ํŒŒ์ผ Diff
    • ๊ฐ™์€ Branch ๋‚ด ์ฐจ์ด์ ์€ View Diff with Working File ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋ณด๊ธฐ ํŽธ๋ฆฌ
  • Git History : ๊ฐœ๋ณ„ ํŒŒ์ผ์— ๋Œ€ํ•œ ํžˆ์Šคํ† ๋ฆฌ ๋‚ด์—ญ์„ ์กฐํšŒ
    • ๊ฐ ํŒŒ์ผ์„ ์šฐํด๋ฆญ > Git: View File History

13-2. ์กฐ์ž‘๋ฒ•

  • ์—…๋กœ๋“œ ํ•  ํŒŒ์ผ add : Source Control > Changes to Staged Changes
โš ๏ธ **GitHub.com Fallback** โš ๏ธ