git - deptno/deptno.github.io GitHub Wiki

Git

λΆ„μ‚°μ €μž₯관리 κ³΅μ‹λ¬Έμ„œ: https://git-scm.com/book/ko/v2

by-command

files

νŠΉμ • 컀밋 λ‚΄μš© κ°€μ Έμ™€μ„œ 적용

 git show [SHA] -- [FILE1] [FILE2] | git apply -
 git cherry-pink -n [SHA]

νŠΉμ • 컀밋 λ‚΄μš© 확인

git show [SHA]:[PATH]

νŠΉμ • 컀밋 λ‚΄μš© 비ꡐ

git diff [SHA0] [SHA1] [PATH]

검색

https://stackoverflow.com/questions/2928584/how-to-grep-search-committed-code-in-the-git-history

git grep [REGEXP]

컀밋 λ©”μ‹œμ§€ 검색

git log --grep=[REGEXP]
$ git log --grep=aaaaaaaaa

commit bbbbbbbbb (origin/feature/aaa)
Author: b
Date:   xx
Revert "hello world"

    This reverts commit aaaaaaaaa

commit aaaaaaaaa (fix/a)
Author: a
Date:   yy

    hello world

컀밋 SHA둜 검색을 ν•˜κ²Œ 되면 정상적인 λ¦¬λ²„νŠΈ 컀밋이 μžˆλŠ” 경우 ν•¨κ»˜ κ²€μƒ‰λœλ‹€.

μ½”λ“œ 검색

git grep -pPn [REGEXP]

options

  • -P : perl compatible regular expression
  • -n : λΌμΈλ„˜λ²„λ₯Ό ν¬ν•¨ν•˜μ—¬ 좜λ ₯
  • -p : ν•¨μˆ˜ 이름을 포함
  • -F : fixed string ν˜•νƒœλ‘œ κ²€μƒ‰ν•œλ‹€. regexp κ°€ μ•„λ‹Œκ²¨μš°

κΉƒμ—μ„œ κ΄€λ¦¬ν•˜λŠ” νŒŒμΌμΈμ§€ 확인

git ls-files [FILE]

κΉƒμ—μ„œ λ¬΄μ‹œν•˜λŠ” νŒŒμΌμΈμ§€ 확인

git check-ignore -v [FILE]
# list
git status --ignored [FILE]

rebase -i

git log branch/a branch/b
* (3μ‹œκ°„ μ „) c003c2c
* (3μ‹œκ°„ μ „) c338742
* (3μ‹œκ°„ μ „) ab1a091
* (3μ‹œκ°„ μ „) b44a769
* (3μ‹œκ°„ μ „) 93c7114
* (3μ‹œκ°„ μ „) 54d0235
* (3μ‹œκ°„ μ „) 77c0b5b
* (3μ‹œκ°„ μ „) e5143b1
* (3μ‹œκ°„ μ „) 4c1a5db
* (3μ‹œκ°„ μ „) a288ffb
* (3μ‹œκ°„ μ „) b86b554
* (3μ‹œκ°„ μ „) 75942cd
* (3μ‹œκ°„ μ „) dece25b
* (3μ‹œκ°„ μ „) 3e293e3
* (3μ‹œκ°„ μ „) e21c75b
* (3μ‹œκ°„ μ „) c79629d
| * (6μ‹œκ°„ μ „) 20ad4e2
| * (7μ‹œκ°„ μ „) 88fa156
| * (8μ‹œκ°„ μ „) 063c591
| * (8μ‹œκ°„ μ „) c8c7df7
| * (8μ‹œκ°„ μ „) 282f7b9
| * (8μ‹œκ°„ μ „) fae9472
| * (8μ‹œκ°„ μ „) 4a0981a
| * (8μ‹œκ°„ μ „) b500bf4
| * (9μ‹œκ°„ μ „) 3edc586
| * (9μ‹œκ°„ μ „) e7027c5
| * (9μ‹œκ°„ μ „) 643d23a
| * (9μ‹œκ°„ μ „) 4725f0f
| * (9μ‹œκ°„ μ „) e32ed20
| * (9μ‹œκ°„ μ „) db03f27
| * (9μ‹œκ°„ μ „) 5b84a5f
| * (9μ‹œκ°„ μ „) 1a3949f
| * (10μ‹œκ°„ μ „) 365b2e1
| * (11μ‹œκ°„ μ „) 62b965b
| * (11μ‹œκ°„ μ „) 215e993
| * (11μ‹œκ°„ μ „) 9ba8cba
| * (11μ‹œκ°„ μ „) 3235509
|/
* (12μ‹œκ°„ μ „) 93e9e47
* 
$ git log branch/a..branch/b
* (3μ‹œκ°„ μ „) c003c2c
* (3μ‹œκ°„ μ „) c338742
* (3μ‹œκ°„ μ „) ab1a091
* (3μ‹œκ°„ μ „) b44a769
* (3μ‹œκ°„ μ „) 93c7114
* (3μ‹œκ°„ μ „) 54d0235
* (3μ‹œκ°„ μ „) 77c0b5b
* (3μ‹œκ°„ μ „) e5143b1
* (3μ‹œκ°„ μ „) 4c1a5db
* (3μ‹œκ°„ μ „) a288ffb
* (3μ‹œκ°„ μ „) b86b554
* (3μ‹œκ°„ μ „) 75942cd
* (3μ‹œκ°„ μ „) dece25b
* (3μ‹œκ°„ μ „) 3e293e3
* (3μ‹œκ°„ μ „) e21c75b
* (3μ‹œκ°„ μ „) c79629d
$ git rebase -i \
 $(git merge-base master branch/air) # vimwiki [issue](/deptno/deptno.github.io/wiki/issue) 둜 2쀄 μž‘μ„±

--ancestry-path

HEAD κ°€ μ•„λ‹Œ μ€‘κ°„μœΌλ‘œ checkout ν•œ 경우 HEAD(SHA_02) κΉŒμ§€ μ „μ§„

$ git log --ancestry-path [SHA_01]..HEAD
$ git merge-base branch/a branch/b
93e9e47
$ git log --ancestry-path 93e9e47..branch/b
* (3μ‹œκ°„ μ „) c003c2c
* (3μ‹œκ°„ μ „) c338742
* (3μ‹œκ°„ μ „) ab1a091
* (3μ‹œκ°„ μ „) b44a769
* (3μ‹œκ°„ μ „) 93c7114
* (3μ‹œκ°„ μ „) 54d0235
* (3μ‹œκ°„ μ „) 77c0b5b
* (3μ‹œκ°„ μ „) e5143b1
* (3μ‹œκ°„ μ „) 4c1a5db
* (3μ‹œκ°„ μ „) a288ffb
* (3μ‹œκ°„ μ „) b86b554
* (3μ‹œκ°„ μ „) 75942cd
* (3μ‹œκ°„ μ „) dece25b
* (3μ‹œκ°„ μ „) 3e293e3
* (3μ‹œκ°„ μ „) e21c75b
* (3μ‹œκ°„ μ „) c79629d
$ git 

untracked 파일 μ§€μš°κΈ°

git clean -fd
  • -f : 파일
  • -d : 디렉토리

url λ³€κ²½ν•˜κΈ°

ν•˜λ“œμ½”λ”©λœ url λ•Œλ¬Έμ— 닀쀑 계정을 μ΄μš©ν•˜λŠ” 경우 고톡받을 수 μžˆλ‹€. 닀쀑 계정은 λ‘œμ»¬μ—μ„œkey νŒŒμΌμ„ ν†΅ν•΄μ„œ 인증 정보λ₯Ό 관리할 텐데 이런 경우 ssh κ°€ μ‚¬μš©λœλ‹€.

[.gitconfig-url](/deptno/deptno.github.io/wiki/.gitconfig-url) 을 μ„€μ •ν•œλ‹€.

feature 브랜치 λ³€κ²½λœ νŒŒμΌλ“€ stage ν™”

reset ν›„

git switch feature
git reset --mixed $(git merge-base master @)

1. λ³€κ²½λœ 파일 λͺ¨λ‘ λ²„νΌλ‘œ

vim $(git diff --name-only)

2. μƒνƒœκ°’μœΌλ‘œ ν•„ν„°

vim $(git status -s | grep "[^D] " | awk '{print $2}')

보기만

vim $(git diff --name-status master.. | rg "[^D]\t" | awk '{print $[2](/deptno/deptno.github.io/wiki/2)}')

plumping λͺ…λ Ήμ–΄

  • git rev-parse: 브랜치λͺ…μ΄λ‚˜ νƒœκ·Έλ₯Ό 컀밋 ν•΄μ‹œλ‘œ λ¦¬ν„΄ν•œλ‹€.
  • git rev-list: git log λ“±μ˜ λ ˆμΈμ§€λ₯Ό κ°€μ§€λŠ” κ²°κ³Όλ₯Ό 기반으둜 컀밋 ν•΄μ‹œλ§Œ 뽑아낸닀.
    • --abbrev-commit μ˜΅μ…˜ κ°€λŠ₯

releated