git(1) - git?πŸ€”


git

git은 λΆ„μ‚°λ²„μ „κ΄€λ¦¬μ‹œμŠ€ν…œμœΌλ‘œ μ½”λ“œμ˜ 버전을 κ΄€λ¦¬ν•˜λŠ” 도ꡬ닀.

컴퓨터 파일의 변경사항을 μΆ”μ ν•˜κ³  μ—¬λŸ¬ μ‚¬μš©μžλ“€ 간에 ν•΄λ‹Ή νŒŒμΌλ“€μ˜ μž‘μ—…μ„ μ‘°μœ¨ν•˜λŠ” λͺ©μ μœΌλ‘œ μ‚¬μš©ν•œλ‹€.

λΆ„μ‚°λ²„μ „κ΄€λ¦¬μ‹œμŠ€ν…œ(DVCS)은 원격저μž₯μ†Œλ₯Ό 톡해 ν˜‘μ—…ν•˜κ³  λͺ¨λ“  νžˆμŠ€ν† λ¦¬λ₯Ό μ‚¬μš©μžλ“€μ΄ κ³΅μœ ν•˜λŠ” μ‹œμŠ€ν…œμ΄λ‹€.


κΈ°λ³Έ 흐름

git은 λ‚˜λ¬΄μ™€ λΉ„μŠ·ν•œκ²ƒ κ°™λ‹€. ν•˜λ‚˜μ˜ μž‘μ—…(master)μ—μ„œ λ…λ¦½μ μœΌλ‘œ μ–΄λ–€ μž‘μ—…μ„ μ§„ν–‰ν•˜κΈ° μœ„ν•΄ 갈래λ₯Ό μƒμ„±ν•˜λŠ”κ²ƒμ„ 브랜치(branch)라고 λΆ€λ₯΄λ©°, git 에 κ΄€λ¦¬λ˜λŠ” μ†ŒμŠ€λ“€μ„ 쑰금 더 μ‰½κ²Œ ν™œμš©ν•˜κΈ° μœ„ν•œ GUI 툴의 이름은 sourcetreeλ‹€.

git의 둜컬 μ €μž₯μ†ŒλŠ” 크게 3κ°€μ§€λ‘œ λ‚˜λˆ μ ΈμžˆλŠ”λ°,

  1. working directory μž‘μ—…(μˆ˜μ •)ν•œ νŒŒμΌμ„

  2. INDEX(staging area)에 λͺ¨μ•„(add),

  3. λ²„μ „μœΌλ‘œ 남긴닀(commit).


λͺ…λ Ήμ–΄

  1. git init - μ €μž₯μ†Œ λ§Œλ“€κΈ°

    $ git init
    
    • git μ €μž₯μ†Œλ₯Ό 처음 μƒμ„±ν•˜λŠ”κ²ƒ(μ΄ˆκΈ°ν™”). μ΄ˆκΈ°ν™”λ₯Ό μ‹œν‚€λ©΄ ν•΄λ‹Ή 디렉토리λ₯Ό git μ €μž₯μ†Œλ‘œ 등둝해쀀닀.


  2. git add 파일λͺ…

    $ git add .
    
    • working directory μƒμ˜ λ³€κ²½ λ‚΄μš©μ„ staging area에 μΆ”κ°€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” λͺ…λ Ήμ–΄.

    • 폴더 λ‚΄μ˜ 파일 전체λ₯Ό addν•˜λ €λ©΄ .을 μž…λ ₯ν•˜λ©΄ λœλ‹€.


  3. git commit -m β€˜μ»€λ°‹λ©”μ‹œμ§€β€™

    $ git commit -m 'commitμž…λ‹ˆλ‹€.'
    
    • stage에 λ“±λ‘λœ μƒνƒœμ˜ νŒŒμΌλ“€μ„ 컀밋을 톡해 λ²„μ „μœΌλ‘œ κΈ°λ‘ν•˜λŠ” λͺ…λ Ήμ–΄.

    • 컀밋 λ©”μ‹œμ§€λŠ” λ³€κ²½ 사항을 μ•Œ 수 μžˆλ„λ‘ λͺ…ν™•ν•˜κ²Œ μž‘μ„±ν•˜λŠ”κ²ƒμ΄ μ’‹λ‹€.


  4. git log

    $ git log
    $ git log -1
    $ git log --oneline
    $ git log -1 --oneline
    
    • μ €μž₯μ†Œμ˜ 컀밋 νžˆμŠ€ν† λ¦¬λ₯Ό μ‘°νšŒν•˜κ²Œ ν•΄μ€€λ‹€.

    • νŠΉλ³„ν•œ μ˜΅μ…˜ 없이 git log λͺ…령을 μ‹€ν–‰ν•˜λ©΄ μ €μž₯μ†Œμ˜ 컀밋 νžˆμŠ€ν† λ¦¬λ₯Ό μ‹œκ°„μˆœμœΌλ‘œ λ‚˜νƒ€λ‚Έλ‹€.

    • -1 은 졜근 ν•œ 개의 결과만 λ³΄μ—¬μ£ΌλŠ” μ˜΅μ…˜μ΄λ‹€.

    • oneline은 결과값을 ν•œ μ€„λ‘œ λ‚˜νƒ€λ‚΄λŠ” μ˜΅μ…˜μ΄λ‹€.


  5. git status - ν˜„μž¬ μƒνƒœ 확인

    $ git status
    
    • νŒŒμΌλ“€μ˜ μƒνƒœλ₯Ό 확인할 수 μžˆλ‹€.

    • μž‘μ—… 디렉토리(working directory)와 μŠ€ν…Œμ΄μ§• μ˜μ—­(staging area)의 μƒνƒœλ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.


      μ˜ˆμ‹œ

    • a.txt νŒŒμΌμ„ λ§Œλ“  직후

      $ git status
      On branch master
           
      # νŠΈλž˜ν‚Ήμ΄ 되고 μžˆμ§€ μ•Šμ€ 파일?
      # => working directory
      # => ν•œλ²ˆλ„ git으둜 κ΄€λ¦¬λ˜κ³  μžˆμ§€ μ•Šμ€ 파일!
      Untracked files:
      (use "git add <file>..." to include in what will be committed)
       a.txt
            
      # 컀밋할 것은 μ—†μ–΄
      # ν•˜μ§€λ§Œ νŠΈλž˜ν‚Ήλ˜μ§€ μ•Šμ€ νŒŒμΌμ€ μ‘΄μž¬ν•œλ‹€.
      # git add μ‚¬μš©ν•΄μ„œ νŠΈλž˜ν‚Ήν•΄
      nothing added to commit but untracked files present (use "git add" to track)
      
    • b.txt νŒŒμΌμ„ λ§Œλ“€κ³  addν•œ 이후

      $ git stagus
      On branch master
      Changes to be Committed:
      (use "git restore --staged <file>..." to unstage)
      new file: b.txt
           
      Untracked files:
      	(use "git add <file>..." to include in what will be committed)
      	 a.txt
      
    • a.txt 파일과 b.txt νŒŒμΌμ„ λͺ¨λ‘ addν•œ 이후 μ»€λ°‹κΉŒμ§€

      $ git status
      On branch master
           
      nothing to commit, working tree clean
      

κ΄€μ‹¬μžˆμ„ 포슀νŒ