Skip to content
egoing edited this page Dec 14, 2020 · 43 revisions

์ด๊ณณ์œผ๋กœ ์˜ค๋Š” ์ฃผ์†Œ โ‡จ http://bit.ly/git-offline

ํ•„์ˆ˜๋กœ ์„ค์น˜ํ•ด์ฃผ์„ธ์š”.

  • git : https://git-scm.com/ (git ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ, ๊นƒ์ด ์„ค์น˜๋˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”)
  • vscode : https://code.visualstudio.com/ (์ฝ”๋“œ ์—๋””ํ„ฐ ํ”„๋กœ๊ทธ๋žจ, ํฌํ„ฐ๋ธ” ๋ฒ„์ „์€ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”)

๊ฐ•์‚ฌ๊ฐ€ ์„ค์น˜๋ฅผ ํŠน๋ณ„ํžˆ ์š”์ฒญํ–ˆ์„ ๋•Œ๋งŒ ์„ค์น˜ํ•ด์ฃผ์„ธ์š”.

  • snipaste : https://www.snipaste.com/ (์Šคํฌ๋ฆฐ์บก์ฒ˜ ํ”„๋กœ๊ทธ๋žจ. ์„ ํƒ์‚ฌํ•ญ)
  • sourcetree : https://www.sourcetreeapp.com/ ์„ค์น˜ํ•  ๋•Œ Registration ํ•ญ๋ชฉ์—์„œ bitbucket server ๋ง๊ณ  bitbucket์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. bitbucket์— ํšŒ์›๊ฐ€์ž…์„ ํ•ด์•ผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ์–ด์™€ ๊ฐ™์ด ์˜ค๋ž˜๋œ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์„ค์น˜๊ฐ€ ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.ํฌ๋กฌ์„ ์ด์šฉํ•ด์ฃผ์„ธ์š”. (๊นƒ ํด๋ผ์ด์–ธํŠธ. ๊ฐ•์‚ฌ๊ฐ€ ์„ค์น˜๋ฅผ ์š”์ฒญํ•  ๋•Œ ์„ค์น˜ํ•ด์ฃผ์„ธ์š”.)

kdiff3

http://kdiff3.sourceforge.net/ (๋น„๊ต ํ”„๋กœ๊ทธ๋žจ. ๊ฐ•์‚ฌ๊ฐ€ ์„ค์น˜๋ฅผ ์š”์ฒญํ•  ๋•Œ ์„ค์น˜ํ•ด์ฃผ์„ธ์š”.)

windows

git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add mergetool.kdiff3.trustExitCode false

git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add difftool.kdiff3.trustExitCode false

macos

git config --add merge.tool kdiff3
git config --add mergetool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3 
git config --add mergetool.kdiff3.trustExitCode false
git config --add diff.guitool kdiff3
git config --add difftool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3 
git config --add difftool.kdiff3.trustExitCode false

p4merge

window

git config --global diff.tool p4merge
git config --global difftool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge
git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'

ํ•œ๊ธ€์ด ๊นจ์ง€๋Š” ๊ฒฝ์šฐ : Configure > Regional Settings > File Encoding for A > "UTF-8 BOM" ์œผ๋กœ ๋ณ€๊ฒฝ

๋ฌธ์ œ ํ•ด๊ฒฐ

  • git commit ๋ช…๋ น์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด
*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address

์•„๋ž˜์™€ ๊ฐ™์ด ์ž์‹ ์˜ ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ์„ git์—๊ฒŒ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „์„ ์ƒ์„ฑํ•  ๋•Œ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•  ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ์„ ์„ค์ •ํ•˜๋Š” ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

๊ฐ€์ž…ํ•ด์ฃผ์„ธ์š”

์†๊นƒ

ScreenShot

ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋Š” ๋ฒ•

cheatsheet

https://www.atlassian.com/git/tutorials/atlassian-git-cheatsheet

git ๊ธฐ๋ณธ ์—๋””ํ„ฐ๋ฅผ vscode๋กœ ๋ณ€๊ฒฝ

git config --global core.editor "code --wait"

git ๊ธฐ๋ณธ ์—๋””ํ„ฐ๋ฅผ nano๋กœ ๋ณ€๊ฒฝ

git config --global core.editor "nano"

์ˆ˜๋ จ

  1. ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ๋งŒ๋“ ๋‹ค.
  2. ํด๋”๋ฅผ ์ €์žฅ์†Œ๋กœ ์ง€์ •ํ•œ๋‹ค. (git init)
  3. ํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ๋‹ค.
  4. ์ปค๋ฐ‹์— ํฌํ•จ์‹œํ‚ค๊ณ  ์‹ถ์€ ํŒŒ์ผ์„ ์Šคํ…Œ์ด์ง€๋กœ ๋“ฑ๋กํ•œ๋‹ค. (git add)
  5. ์ปค๋ฐ‹ํ•œ๋‹ค. (git commit)
  6. ์‹œ๊ฐ„ ์—ฌํ–‰์„ ํ•ด๋ณธ๋‹ค (HEAD๋ฅผ ์˜ฎ๊ธด๋‹ค. => git checkout)
  7. ์‹œ๊ฐ„ ์—ฌํ–‰์„ ๋๋‚ธ๋‹ค. (git checkout master)
  8. ๋ฒ„์ „์„ ์ทจ์†Œํ•œ๋‹ค. (master๋ฅผ ์˜ฎ๊ธด๋‹ค. => git reset --hard )
  9. ๋ฒ„์ „์„ ๋ณต๊ตฌํ•œ๋‹ค. (์ž‘์—… ๋‚ด์—ญ์„ ์กฐํšŒํ•œ๋‹ค. => git reflog)
  10. ์‹คํ—˜์ ์ธ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ ๋‹ค(git branch exp)
  11. ์‹คํ—˜์ ์ธ ์ž‘์—… ๋ธŒ๋žœ์น˜์—์„œ ์ปค๋ฐ‹ํ•œ๋‹ค. (git checkout exp)
  12. ๋งˆ์Šคํ„ฐ์—์„œ ์ž‘์—…์„ ํ•œ๋‹ค. (git checkout master)
  13. ๋งˆ์Šคํ„ฐ๋กœ ์‹คํ—˜์„ ๋ณ‘ํ•ฉํ•œ๋‹ค. (git checkout master && git merge exp)
  14. ์ถฉ๋Œ ์ƒํ™ฉ์„ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค. (3 way merge์˜ ๊ฐœ๋…์„ ํ™œ์šฉํ•œ๋‹ค)
  15. ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ ๋‹ค. (github.com, gitlab.com)
  16. ์ง€์—ญ ์ €์žฅ์†Œ์— ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. (git remote add origin ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ฃผ์†Œ)
  17. ์ง€์—ญ ์ €์žฅ์†Œ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋“ฑ๋กํ•œ๋‹ค. (ssh-keygen, id_rsa.pub ํŒŒ์ผ์„ github์˜ ๊ณ„์ •์— ssh ํ‚ค๋กœ ๋“ฑ๋กํ•œ๋‹ค)
  18. ์ง€์—ญ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜์™€ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. (git push -u origin master)
  19. ๋™๋ฃŒ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. (github์˜ setting์˜ collaborators์— ๋™๋ฃŒ์˜ ๊ณ„์ •์„ ์ถ”๊ฐ€ํ•œ๋‹ค)
  20. ์ถฉ๋Œ ์ƒํ™ฉ์„ ๋งŒ๋“ค์–ด๋ณธ๋‹ค.

์‹คํ—˜์‹ค

์ž๋™์œผ๋กœ ์ปค๋ฐ‹ ๋งŒ๋“ค๊ธฐ

ํŒŒ์ผ์„ ์ƒˆ๋กœ ๋งŒ๋“ค๋ฉด์„œ ์ปค๋ฐ‹ ์ƒ์„ฑ

for i in {a..f} ; do echo $i > $i.txt; git add $i.txt; git commit -m "$i"; done;

foo.txt์— ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ํŒŒ์ผ ์ƒ์„ฑ

for i in {a..f} ; do echo $i > foo.txt; git add foo.txt; git commit -m "$i"; done;

rebase ์ถฉ๋Œ ์‹คํ—˜

https://www.icloud.com/keynote/0L29YPsBkbTRSfiPWtT1rl6fg#keynote_2

์ถฉ๋Œ ๋‚˜๋Š” ๊ฒฝ์šฐ

์‹คํ—˜์‹ค

git checkout master;
echo "1
-
-
2
-
-
3
-
-
4" > work.txt;
git add work.txt;
git commit -am "start";
git branch -D left;
git checkout -b left
echo "1
-
-
L2
-
-
3
-
-
4" > work.txt
git commit -am "L2";
echo "1
-
-
L2
-
-
3
-
-
L4" > work.txt
git commit -am "L4";
git checkout master;
git branch -D right;
git checkout -b right;
echo "1
-
-
2
-
-
R3
-
-
4" > work.txt;
git commit -am "R3";
echo "1
-
-
2
-
-
R3
-
-
R4" > work.txt;
git commit -am "R4";
echo "1
-
-
2
-
-
R3
-
-
R45" > work.txt;
git commit -am "R5";

์‹คํ—˜ 1 - rebase ์ถฉ๋Œ

git checkout right;
git rebase left;

์‹คํ—˜ 2 - merge ์ถฉ๋Œ

git checkout left;
git merge right;

revert ์ถฉ๋Œ ์‹คํ—˜

์ถฉ๋Œ ๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

์‹คํ—˜์‹ค

git init;
echo "1\n\n2\n\n3\n\n4" > revert.txt;
git add revert.txt;
git commit -m "init";
echo "m1\n\n2\n\n3\n\n4" > revert.txt;
git commit -am "m1";
echo "m1\n\nm2\n\n3\n\n4" > revert.txt;
git commit -am "m2";
echo "m1\n\nm2\n\nm3\n\n4" > revert.txt;
git commit -am "m3";
echo "m1\n\nm2\n\nm3\n\nm4" > revert.txt;
git commit -am "m4";

์‹คํ—˜

git revert HEAD@{2}

์ถฉ๋Œ์ด ๋‚˜๋Š” ๊ฒฝ์šฐ

์‹คํ—˜์‹ค

git init;
echo "" > revert.txt;
git add revert.txt;
git commit -m "init";
echo "1" > revert.txt;
git commit -am "1";
echo "2" > revert.txt;
git commit -am "2";
echo "3" > revert.txt;
git commit -am "3";
echo "4" > revert.txt;
git commit -am "4";

์‹คํ–‰

git revert HEAD@{2};
# 1 - 2 - 4

๋ฒ„๊ทธ ์ฐพ๊ธฐ

https://github.com/egoingsb/git-linear-binary-compare.git

echo "1 linearsearch unhappy bug" >> foo.txt ; git add foo.txt; git commit -m 1;
for i in {2..100} ; do echo $i >> foo.txt; git add foo.txt; git commit -m "$i"; done;
echo "101 binary search happy bug" >> foo.txt ; git add foo.txt; git commit -m 101;
for i in {102..125} ; do echo $i >> foo.txt; git add foo.txt; git commit -m "$i"; done;
echo "126 binary search unhappy bug" >> foo.txt ; git add foo.txt; git commit -m 126;
for i in {127..199} ; do echo $i >> foo.txt; git add foo.txt; git commit -m "$i"; done;
echo "200 linear search happy bug" >> foo.txt ; git add foo.txt; git commit -m 200;

Clone this wiki locally