Git 명령어 정리
git init
현재 폴더에 git을 등록한다.
git clone {PATH}
PATH의 깃 원격 저장소에 있는 내용들을 모두 가져온다.
git clone은 다음과 같은 명령어들로 원격 저장소의 내용을 가져온다.
git clone은 다음과 같은 명령어들로 원격 저장소의 내용을 가져온다.
1. 저장소 폴더 생성
2. 저장소 폴더 내에서 git init
3. git remote add origin {PATH}
4. git fetch
5. git checkout {최종 커밋}
git branch [-l], git branch -v, git branch -r, git branch -a
-l 옵션은 생략이 가능하며, 로컬 브랜치들의 목록을 보여준다.
-v 옵션은 로컬 브랜치들의 목록을 마지막 커밋 내용과 함께 보여준다.
-r 옵션은 원격 브랜치들의 목록을 보여준다.
-a 옵션은 원격/로컬 브랜치들의 목록을 모두 보여준다.
git branch {이름}, git branch {생성 브랜치} {기준 브랜치}
새로운 브랜치를 생성한다.(단, 생성만 하고 이동은 하지 않는다)
branch 명령어의 인자로 이름을 두 개 주면 뒤 브랜치를 기준으로 새로운 브랜치를 생성한다.(마찬가지로 새로운 브랜치로의 이동은 하지 않는다)
git branch (-merged | -no-merged)
-merged 옵션은 이미 merge 된 브랜치들, -no-merged 옵션은 아직 merge 되지 않은 브랜치들을 보여준다.(*이 붙지 않은 브랜치들은 이미 merge되었기 때문에 삭제가 가능하다)
git branch -d (이름)
해당 브랜치를 삭제한다.(*이 붙어 있으면 삭제가 불가능하다)
git branch -d (이름)
해당 브랜치를 삭제한다.(*이 붙어 있으면 삭제가 불가능하다)
git branch -m (기존 이름 A) (바꿀 이름 B)
브랜치 A를 브랜치 B로 변경한다.(-M 옵션을 사용할 경우 동일한 이름의 브랜치도 덮어 쓴다)
git add {파일 이름}, git add . , git add -u, git add -A, git add --all
파일 이름만 적게 되면 해당 파일만 스테이징한다.
. 옵션을 주면 변화된 파일, 추가된 파일을 스테이징한다.(삭제된 파일은 x)
-u 옵션을 주면 변화된 파일, 삭제된 파일을 스테이징한다.(추가된 파일은 x)
-A, --all 옵션을 주면 현재 추적 중인 모든 변화된 파일을 스테이징한다.(삭제, 추가, 변화 o)
git add -i, git add --interactive
원하는 파일만을 고를 수 있게 대화형 프로그램이 시작된다.
원하는 파일만을 고를 수 있게 대화형 프로그램이 시작된다.
git add -p
원하는 라인만 스테이징할 수 있도록 변경된 라인을 한 줄씩 보여준다.
s(split) : 변경 단위를 더 세밀하게 쪼갠다.
n(no) : 해당 변경 사항을 스테이징하지 않는다.
y(yes) : 해당 변경 사항을 스테이징한다.
e(edit) : 스테이징할 라인을 직접 편집할 수 있다.
git remote, git remote -v
등록된 원격 저장소의 이름만 보여준다.
-v 옵션을 주면 등록된 원격 저장소의 이름과 URL을 보여준다.
git remote add {리모트 이름} {PATH}
해당 PATH의 원격 저장소를 {리모트 이름}으로 등록한다.
git remote show {리모트 이름}
해당 리모트의 모든 브랜치와 정보를 보여준다.
git remote rm {리모트 이름}
해당 리모트를 제거한다.
git remote update
모든 리모트의 정보를 업데이트한다.(새로운 원격 브랜치가 갱신된다)
git remote prune {리모트 이름}
리모트 브랜치 정보와 로컬 브랜치 정보를 비교해 로컬 브랜치를 갱신한다.
git status
git status
현재 브랜치, 파일들의 상태 등 전반적인 상태를 보여준다.
git status -s, git status --short
파일의 상태를 문자로 보여준다.
<??> {파일 이름} : 해당 파일이 git 디렉토리에 추가되었지만 추적중이지 않은 상태
<A > {파일 이름} : 새로운 파일이 추가된 후 Staged 된 상태, 이전 상태가 없으므로 Modified 여부를 알 수 없다.
< M> {파일 이름} : 추적중이던 파일이 수정되었지만 Staged 되지 않은 상태
<M > {파일 이름} : 추적중이던 파일을 수정하고, Staged 한 상태
<MM> {파일 이름} : 첫 번째 수정 내역은 Staged 되었지만 두 번째 수정 내역은 아닌 상태, 이 때 Commit 을 하면 두 번째 수정 내역은 여전히 남아 < M> 상태가 된다.
git commit, git commit -m {커밋 메세지}, git commit -am {커밋 메세지}
git commit, git commit -m {커밋 메세지}, git commit -am {커밋 메세지}
옵션을 주지 않으면 커밋 에디터가 열리고, 변경 내용을 텍스트로 저장하면 커밋이 생성된다.
-m 옵션을 주면 커밋 에디터 없이 메세지 등록이 가능하다.
-am 옵션을 주면 스테이징, 커밋이 동시에 실행된다.
git commit --amend -m {커밋 메세지}, git commit --amend --no-edit
이전 커밋 내용에 빠뜨린 내용이 있을 경우 사용한다.
새롭게 Staged 된 내용을 바로 이전 커밋에 추가하고, 옵션에 따라 커밋 메세지를 바꿀 수도 있다. 단, amend 는 로컬에서만 사용하는게 좋다.
git commit -v
현재 스테이징된 내용을 자세히 보여준다.
git checkout {브랜치 이름}, git checkout -b {브랜치 이름}, git checkout -t {원격 브랜치}
git checkout {브랜치 이름}, git checkout -b {브랜치 이름}, git checkout -t {원격 브랜치}
해당 브랜치로 헤드를 옮긴다.
-b 옵션을 주면 새로운 브랜치를 만들고 그 브랜치로 헤드를 옮긴다.
-t 옵션을 주고 원격 브랜치 이름을 입력하면 원격 브랜치 이름 그대로 로컬 브랜치가 생성되고 그 브랜치로 헤드를 옮긴다.
git merge {합칠 브랜치 이름}
git merge {합칠 브랜치 이름}
현재 헤드의 브랜치와 대상 브랜치를 merge 한다.
git merge -Xignore-space-change {합칠 브랜치 이름}, git merge -Xignore-all-space {합칠 브랜치 이름}
단순히 공백의 변화(스페이스 -> 탭 or 탭 -> 스페이스)만으로 충돌이 발생했을 때 쓸 수 있다. 공백의 변화를 무시하고 merge를 진행한다.
git merge --abort
현재 merge를 취소한다. merge 전에 워킹 디렉토리에서 stash나 커밋하지 않은 파일(저장되지 않은 파일)이 있다면 취소되지 않는다.(무시하고 되돌리고 싶다면 git reset --hard HEAD를 이용하자)
git merge -Xours {브랜치 이름}, git merge -Xtheirs {브랜치 이름}
대상 브랜치와 merge를 할 때, 충돌이 발생하면 충돌을 무시하고 무조건 현재 브랜치(ours)나 대상 브랜치(theirs)의 내용으로 merge한다.
+ git rebase : merge와 같이 두 브랜치를 병합할 때 사용된다. rebase는 병합 과정이 마치 하나의 브랜치에서 된 것처럼 히스토리를 보여주게 된다.
git revert {돌아갈 커밋 명}, git revert {시작 커밋}.. {끝 커밋}
해당 커밋 혹은 커밋들로 돌아간다. 커밋 내용이 사라지지 않으며, revert한 내역까지 commit log에 남게 된다.
revert는 커밋 내역이 사라지지 않아 이미 원격 저장소에 push한 뒤 커밋을 되돌려도 충돌이 나지 않는다.
git reset --hard {돌아갈 커밋 명}
해당 커밋 이후의 모든 변경된 내용을 지우고 돌아간다.(이후의 파일, 스테이징 변경 내역이 모두 사라진다)
git reset --soft {돌아갈 커밋 명}
해당 커밋으로 돌아갔지만, 이후의 스테이징 내용이 남아있어 다시 커밋할 지를 선택할 수 있다.
git reset {돌아갈 커밋 명}git reset --mixed {돌아갈 커밋 명}
해당 커밋으로 돌아갔지만, 변경된 파일 내역은 남아있어 다시 스테이징할 수 있다.
※ 커밋 명은 커밋 해쉬 값(절대 경로)이나 상대 거리로 정할 수 있다.
ex) git reset HEAD~2 --> 현재 헤드로부터 2번째 전 커밋으로 이동한다.
HEAD^ VS HEAD~
^n : n번째 부모를 가르킨다.(^ == 1)
ex) HEAD^1 == 헤드의 첫 번째 부모
~n : 현재 노드에서 첫 번째 부모만을 따라갈 때 n번째 조상
ex) HEAD~2 == 헤드의 두 번째 조상
reset은 커밋 이력이 모두 사라지기 때문에 로컬에서만 사용하기 좋다.
git log, git log -p -n
옵션을 주지 않으면 모든 커밋 히스토리를 시간 순으로 보여준다.
-p 옵션을 주면 커밋들의 diff 정보를 보여준다.
-n 옵션을 주면 최근 n개의 히스토리를 보여준다.
git diff {로컬 브랜치} {로컬 브랜치}, git diff {로컬 브랜치} {원격 브랜치}, git diff {커밋 명} {커밋 명}, git diff {커밋 or 브랜치} {Pull Request 브랜치}
위와 같이 여러 조합으로 사용할 수 있으며, 서로의 차이를 보여준다.
git diff [커밋 명], git diff --staged [커밋 명]
옵션을 주지 않으면 해당 커밋과 현재 unstaged된 수정 사항과의 차이를 보여준다.(default는 마지막 커밋 기준)
--staged 옵션을 주면 해당 커밋과 staged된 수정 사항과의 차이를 보여준다.
git fetch [원격 저장소]
원격 저장소의 최신 내역들을 불러오지만 합치지는 않는다.(원격 저장소 내역만으로 새로운 커밋을 만든다 -> 후에 내 워킹 디렉토리와 merge 해야함)
git fetch --prune
원격 저장소에서 지워진 로컬 브랜치들을 자동으로 삭제해 준다.
git pull [원격 저장소], git pull --rebase [원격지]
원격 저장소의 최신 내역들을 볼러와 merge까지 수행한다.(즉, fetch + merge)
--rebase 옵션을 주면 합칠 때 merge 대신 rebase로 수행한다.
git push {원격 저장소} {원격 브랜치}
해당 원격 브랜치로 로컬 저장소의 최신 커밋 내역을 업로드한다.
git push -u {원격 저장소} {로컬 브랜치}, git push --set-upstream {원격 저장소} {로컬 브랜치}
브랜치를 추적해서 이후에 git push 명령어만 입력해도 원격 저장소로 push가 가능해진다.
git push --delete {원격 브랜치}
원격 저장소의 해당 브랜치를 삭제한다.
git cherry-pick {커밋 명}, git cherry-pick {시작 커밋 명} {끝 커밋 명}특정 커밋이나 커밋들을 현재 브랜치에 복사한다.
댓글
댓글 쓰기