SOITZ

Git 명령어 모음

Published on

Git을 사용하는 데 있어 가장 기본적이면서 중요한 명령어들을 소개합니다.

1. git init

새로운 Git 저장소를 초기화합니다.

git init

2. git clone

원격 저장소를 로컬로 복제합니다.

git clone https://github.com/username/repository.git

3. git add

변경된 파일을 스테이징 영역에 추가합니다.

git add .

4. git commit

스테이징 영역의 변경 사항을 저장소에 커밋합니다.

git commit -m "Add initial project files"

5. git status

변경된 파일의 상태를 확인합니다.

git status

6. git push

로컬의 커밋을 원격 저장소로 푸시합니다.

git push origin main

7. git pull

원격 저장소의 최신 변경사항을 로컬에 가져옵니다.

git pull origin main

8. git branch

브랜치를 생성하거나 목록을 보거나 삭제합니다.

# new-feature 라는 이름의 새로운 브랜치를 생성
git branch new-feature


# -d 옵션은 지정된 브랜치를 삭제합니다. 이 경우 old-feature라는 브랜치를 삭제합니다.
# git branch -d 명령은 안전 삭제 옵션으로, 삭제하려는 브랜치의 변경사항이 이미 다른 브랜치에 병합되었을 경우에만 해당 브랜치를 삭제합니다. 만약 병합되지 않은 변경사항이 있을 경우, 삭제가 거부됩니다.
# 병합되지 않은 변경사항을 강제로 삭제하고 싶다면 git branch -D 명령을 사용할 수 있습니다. 이 옵션은 주의해서 사용해야 합니다.
git branch -d old-feature
8.1. git branch -a, --all

로컬과 원격 저장소에 있는 모든 브랜치를 표시합니다.

git branch -a
git branch --all
8.2. git branch -d, --delete

지정된 브랜치를 삭제합니다. 이 옵션은 안전 삭제로, 브랜치의 변경사항이 이미 다른 브랜치에 병합된 경우에만 삭제를 허용합니다.

git branch -d feature-branch
8.3. git branch -D

브랜치를 강제로 삭제합니다. 이는 -d 옵션의 강제 버전으로, 병합되지 않은 변경사항이 있는 브랜치도 삭제할 수 있습니다.

git branch -D feature-branch
8.4. git branch -m, --move

브랜치의 이름을 변경합니다. 이 명령은 기존 브랜치를 새로운 이름으로 바꾸는데 사용됩니다.

git branch -m old-name new-name
8.5. git branch -M

브랜치 이름을 강제로 변경합니다. 이는 -m 옵션의 강제 버전으로, 새로운 이름이 이미 존재하는 경우에도 이름을 변경합니다.

git branch -M old-name new-name
8.6. git branch --list

브랜치 목록을 표시합니다. 패턴을 사용하여 특정 브랜치를 필터링할 수도 있습니다.

# 특정 패턴에 맞는 브랜치만 보기
git branch --list 'feature-*'

8.7. git branch -r, --remotes

원격 브랜치만을 표시합니다.

git branch -r
8.8. git branch --show-current

현재 체크아웃된 브랜치의 이름을 표시합니다.

git branch --show-current
8.9. git branch --contains <commit>

지정된 커밋을 포함하는 모든 브랜치를 나열합니다. 특정 커밋이 어느 브랜치들에 적용되었는지 확인할 때 유용합니다.

# 이 명령은 커밋아이디 1234abc를 포함하는 모든 브랜치를 나열합니다.
git branch --contains 1234abc

8.10. git branch --merged <commit>

지정된 커밋 또는 브랜치와 병합된 모든 브랜치를 나열합니다. 이를 통해 어떤 브랜치들이 이미 주어진 브랜치에 병합되었는지 파악할 수 있습니다.

# 이 명령은 main 브랜치와 병합된 모든 브랜치를 보여줍니다.
git branch --merged main
8.11. git branch --no-merged <commit>

지정된 커밋 또는 브랜치와 병합되지 않은 모든 브랜치를 나열합니다. 이는 병합되지 않은 브랜치들을 파악하고 관리하는 데 도움이 됩니다.

# 이 명령은 main 브랜치와 병합되지 않은 모든 브랜치를 나열합니다.
git branch --no-merged main

9. git switch

switch 명령어는 브랜치를 전환하는 데 사용됩니다. 이 명령어는 checkout에서 브랜치를 전환하는 기능만을 분리하여 만들어진 명령어입니다.

git switch new-feature
9.1. git switch -c, --create <branch>

새로운 브랜치를 생성하고 그 브랜치로 전환합니다.

git switch -c new-feature
9.2. 브랜치 전환

기존 브랜치로 전환합니다.

git switch existing-branch
9.3. git switch -t, --track

원격 브랜치를 추적하는 새 로컬 브랜치를 생성합니다.

# 원격의 dev 브랜치를 기반으로 추적 브랜치를 로컬에 생성하고 체크아웃합니다.
git switch -t origin/dev
9.4. git switch --orphan

새로운 orphan 브랜치를 생성합니다.

orphan 브랜치는 "고아 브랜치"라고도 불리며, 이전의 커밋 이력과 연결되지 않는 독립된 새 브랜치를 의미합니다. 즉, 이 브랜치는 첫 커밋부터 새로운 이력을 시작합니다. 일반적인 브랜치는 부모 커밋을 가지고 있지만, 고아 브랜치는 부모 커밋이 없습니다.

고아 브랜치의 주요 사용 사례는 다음과 같습니다:

  • 새로운 프로젝트 시작: 기존 프로젝트 리포지토리 내에서 완전히 새로운 프로젝트를 시작하고 싶을 때 사용될 수 있습니다. 이 방법을 사용하면 기존의 모든 파일과 커밋 이력을 무시하고 새로 시작할 수 있습니다.
  • 기존 리포지토리의 리셋: 때로는 프로젝트의 현재 상태를 청소하고 처음부터 다시 시작하고 싶을 수 있습니다. 고아 브랜치를 생성하면 기존 이력을 버리고 새로운 기점에서 작업을 시작할 수 있습니다.
  • GitHub Pages: GitHub Pages를 사용하여 웹사이트를 호스팅하는 경우, gh-pages 브랜치를 고아 브랜치로 만들어 프로젝트의 나머지 부분과 독립적으로 웹사이트의 내용을 관리할 수 있습니다.
git switch --orphan fresh-start

10. git restore

git restore 명령어는 작업 디렉터리 또는 스테이징 영역의 파일을 복원하는 데 사용됩니다. 이 명령어는 파일을 특정 상태로 되돌리는 기능을 맡습니다.

10.1. 워킹 디렉터리의 파일 복원

파일을 마지막 커밋 상태로 되돌립니다.

# 이 명령은 filename.txt 파일을 마지막 커밋 시의 상태로 워킹 디렉터리에서 복원합니다.
git restore filename.txt
10.2. git restore --staged

스테이징 영역에서 파일을 복원합니다.

# 이 명령은 스테이징된 filename.txt 파일을 스테이징 이전의 상태로 복원합니다.
git restore --staged filename.txt
10.3. git restore --source

특정 커밋 또는 브랜치에서 파일을 복원합니다.

# 이 명령은 filename.txt 파일을 한 커밋 전의 상태로 복원합니다.
git restore --source HEAD~1 filename.txt

11. git merge

다른 브랜치의 변경사항을 현재 브랜치에 병합합니다.

git merge feature-branch

12. git rebase

커밋의 기반을 다시 설정합니다.

git rebase main

13. git log

커밋 로그를 확인합니다.

git log
13.1. git log --oneline

커밋을 한 줄로 간단히 보여 줍니다. 각 커밋은 해시의 축약형과 커밋 메시지로 표시됩니다.

git log --oneline
13.2. git log --graph

커밋 이력을 ASCII 그래프 형태로 보여 줍니다. 브랜치와 머지의 시각적 표현이 가능합니다.

git log --graph
13.3. git log --decorate

커밋 정보에 브랜치 이름이나 태그 같은 참조 이름을 추가합니다.

git log --decorate
13.4. git log --stat

커밋에서 변경된 파일 목록과 각 파일에서 변경된 통계를 보여 줍니다. 각 커밋에 대한 변경 파일과 변경된 줄의 수, 추가/삭제된 내용을 요약해서 보여 줍니다.

git log --stat
13.5. git log -p 또는 --patch

각 커밋에 대한 패치를 보여 주어 변경된 내용을 자세히 볼 수 있습니다. q각 커밋의 변경 사항을 diff 형식으로 보여 줍니다.

git log -p
13.6. git log --author="name"

특정 작성자의 커밋만을 보여 줍니다.

# 이 명령은 "John Doe"가 작성한 커밋만을 필터링하여 보여 줍니다.
git log --author="John Doe"
13.7. git log --since, --until

특정 날짜 이후 또는 이전의 커밋만을 보여 줍니다.

# 이 명령은 2023년 12월 1일부터 2024년 4월 10일 사이에 이루어진 커밋만을 보여 줍니다.
git log --since="2023-12-01" --until="2024-04-10"
13.8. git log --grep="pattern"

커밋 메시지에서 특정 패턴을 포함하는 커밋만을 검색합니다.

# 이 커밋 메시지에 "bug fix"라는 단어가 포함된 커밋만을 찾아서 보여 줍니다.
git log --grep="bug fix"
13.9. git log --no-merges

머지 커밋을 제외하고 결과를 보여 줍니다.

# 이 명령은 머지 커밋을 제외한 일반 커밋만을 나열합니다.
git log --no-merges

14. git diff

변경점을 비교합니다.

# 아무 옵션도 사용하지 않을 경우, git diff는 작업 디렉터리와 스테이징 영역 사이의 차이를 보여줍니다.
git diff
14.1. git diff --staged 또는 --cached

스테이징 영역과 마지막 커밋 사이의 차이를 보여줍니다. 변경사항을 커밋하기 전에 확인하고 싶을 때 사용합니다.

git diff --staged
14.2. 특정 파일 또는 디렉터리 비교

변경 사항을 확인하고자 하는 특정 파일이나 디렉터리만 비교합니다.

git diff -- somefile.txt
git diff -- some/directory/
14.3. 특정 커밋 간 비교

두 커밋 사이의 차이를 비교합니다.

git diff commit1 commit2
14.4. git diff --name-only

변경된 파일들의 목록만을 보여줍니다.

git diff --name-only commit1 commit2
14.5. git diff --name-status

변경된 파일들의 목록과 각 파일의 변경 유형(A: 추가, M: 수정, D: 삭제)을 보여줍니다.

git diff --name-status
14.6. git diff -w 또는 --ignore-all-space

공백 변경(스페이스와 탭의 변경)을 무시하고 차이를 비교합니다.

git diff -w
14.7. git diff --color-words

단어 단위로 변경 사항을 색상으로 구분하여 보여줍니다.

git diff --color-words
14.8. git diff --no-index:

Git 관리 하에 있지 않은 두 파일 사이의 차이를 비교합니다.

git diff --no-index file1 file2
14.9. git diff --stat

각 파일의 변경 통계(변경된 줄 수, 추가된 줄 수, 삭제된 줄 수)를 요약해서 보여줍니다.

git diff --stat

15. git stash

작업 중인 변경사항을 임시로 저장합니다.

git stash
git stash pop
15.1. git stash save

현재 변경사항을 스택에 저장합니다. 선택적으로 메시지를 포함할 수 있습니다.

# 이 명령은 작업 중인 변경사항을 "My work in progress"라는 메시지와 함께 저장합니다.
git stash save "My work in progress"
15.2. git stash list

저장된 모든 스태시 목록을 보여 줍니다.

# 이 명령은 저장된 모든 스태시 항목을 나열합니다.
git stash list
15.3. git stash pop

스태시 목록에서 가장 최근의 스태시를 꺼내어 현재 브랜치에 적용하고 스태시 목록에서 해당 항목을 제거합니다.

# 이 명령은 저장된 가장 최근의 스태시를 꺼내 적용하고 스택에서 그 스태시를 제거합니다.
git stash pop
15.4. git stash apply

가장 최근의 스태시 또는 특정 스태시를 현재 브랜치에 적용하지만, 스태시 목록에서는 삭제하지 않습니다.

# 첫 번째 명령은 최근의 스태시를 적용하고, 두 번째 명령은 목록에서 두 번째 스태시를 적용합니다.
git stash apply
git stash apply stash@{1}
15.5. git stash drop

스태시 목록에서 특정 스태시를 삭제합니다.

git stash drop stash@{0}
15.6. git stash clear

스태시 목록을 완전히 비웁니다.

# 이 명령은 모든 스태시를 목록에서 제거합니다.
git stash clear
15.7. git stash branch <branchname>

특정 스태시를 새 브랜치로 체크아웃하고 적용합니다. 이 옵션은 특히 스태시 적용 시 충돌이 발생할 때 유용합니다.

# 이 명령은 스태시를 새 브랜치 new-branch-for-stash에 적용하고 해당 브랜치로 전환합니다.
git stash branch new-branch-for-stash stash@{0}
15.8. git stash show

가장 최근의 스태시 또는 특정 스태시의 변경 내역을 요약해서 보여 줍니다.

# 첫 번째 명령은 최근 스태시의 변경 요약을 보여 주고, 두 번째 명령은 첫 번째 스태시의 변경 내용을 자세히 보여 줍니다 (-p는 패치 형태로 변경 내용을 보여 줍니다).
git stash show
git stash show stash@{0} -p

16. git reset

git reset 명령어는 Git에서 매우 강력한 도구로, 현재 브랜치의 HEAD를 다시 설정하는 데 사용됩니다. 이 명령을 사용하여 커밋을 취소하거나 스테이징 영역의 변경사항을 원하는 대로 조정할 수 있습니다.

git reset --hard HEAD^
16.1. git reset --soft

--soft 옵션은 HEAD를 지정된 커밋으로 이동시키지만, 스테이징 영역과 작업 디렉터리는 변경하지 않습니다. 이 옵션을 사용하면 지정된 커밋 이후의 모든 커밋들이 스테이징 영역에 남게 됩니다.

# 이 명령은 가장 최근의 커밋을 취소하지만, 변경사항은 스테이징 영역에 남겨둡니다.
git reset --soft HEAD~1
16.2. git reset --mixed

--mixed 옵션은 기본 옵션으로, HEAD와 인덱스(스테이징 영역)를 지정된 커밋으로 리셋하지만, 작업 디렉터리는 그대로 둡니다. 이 옵션을 사용하면 변경사항이 스테이징 영역에서 제거되고 작업 디렉터리에만 남게 됩니다.

# 이 명령은 가장 최근의 커밋을 취소하고, 변경사항은 스테이징에서 제거된 후 작업 디렉터리에 남습니다.
git reset --mixed HEAD~1
16.3. git reset --hard

--hard 옵션은 HEAD, 인덱스, 그리고 작업 디렉터리를 모두 지정된 커밋 상태로 리셋합니다. 이는 가장 강력한 리셋 유형으로, 모든 로컬 변경사항을 제거하므로 사용할 때 주의가 필요합니다.

# 이 명령은 가장 최근의 커밋을 취소하고, 모든 로컬 변경사항을 제거합니다.
git reset --hard HEAD~1
16.4. git reset --

파일을 지정할 때 사용되며, 특정 파일만 리셋할 때 유용합니다.

# 이 명령은 filename.txt 파일의 스테이징된 변경사항을 취소합니다.
git reset HEAD -- filename.txt
16.5. 경로 지정

특정 경로나 파일에 대해서만 리셋을 적용할 수 있습니다.

# 이 명령은 특정 디렉터리에 대한 최근 커밋 변경사항을 취소합니다.
git reset HEAD~1 path/to/directory

17. git rm

파일을 삭제하고 이 변경을 스테이지합니다.

git rm filename.txt

18. git tag

특정 커밋에 태그를 붙여 버전을 관리합니다.

git tag v1.0.0

19. git fetch

원격 저장소의 최신 정보를 로컬에 가져오되 병합하지 않습니다.

git fetch origin

20. git revert

특정 커밋의 변경사항을 되돌립니다.

git revert <commit-hash>

21. git config

Git의 설정 옵션을 구성합니다.

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

22. git show

특정 커밋의 상세 내용을 보여줍니다.

git show <commit-hash>