본 게시글은 모두의 git,github(저자 : 강민철)의 내용을 개인적으로 정리하는 글입니다.
기본적인 명령어
기본 경로에 만들기
- git init
원하는 경로에 만들기
- cd 원하는 경로 (폴더가 이미 생성되어 있어야 함)
- git init
현재 경로 확인
- pwd
작업 디렉터리 상태확인
- git status
스테이지에 올리기
- git add
add 전과 후
변경 사항을 한꺼번에 추가하려면
- git add .
커밋하기
- git commit -m "커밋 메시지"
- git commit -message "커밋 메시지"
커밋 목록 출력
- git log
add와 commit 동시에 하기
- git commit -am "커밋 메시지"
- git commit -a -m "커밋 메시지"
- git commit -all -message "커밋 메시지"
위 명령어는 tracked 파일에만 사용 가능하다.
디테일한 커밋 메시지 작성
- git commit
위 캡쳐는git commit 명령어로 인해 Vim 창이 뜬 것
a 또는 i를 입력하면 입력 모드로 전환되며, 하단에 INSERT가 뜬다.
이제 제목 - 본문으로 구성된 커밋 메시지를 작성할 수 있다.
커밋 메시지를 모두 작성하였으면 ESC키를 누르고, ESC를 누르면 아래의 INSERT가 사라졌을 것이다.
:w 를 입력하고 엔터를 누르고 :q를 다시 누르거나
:wq를 누르면 저장과 입력창 닫기가 모두 된다.
커밋 조회하기
가장 단순한 커밋 조회 명령어는 아래와 같다.
- git log --oneline
자세한 커밋 과정을 보여주는 명령어는 아래와 같다.
- git log --patch
- git log -p
커밋을 그래프 형태로 출력
- git log --graph
브랜치가 여러 개로 나뉘어지고 합쳐지는 환경이면 위 명령어는 유용하다
모든 브랜치의 커밋 목록 조회
git log는 기본적으로 현재 브랜치를 기준으로 커밋 목록을 조회한다.
하지만 아래의 명령어는 모든 브랜치의 커밋 목록을 조회한다.
따라서 어디로 체크아웃 했는지와 상관없이 동일한 결과를 나타낸다.
태그 추가하기
- git tag 태그
특정 커밋에 태그 추가
- git tag 태그 커밋해시
짧은 커밋해시를 입력해도 상관없다.
태그 조회
- git tag --list
- git tag -l
태그 삭제
- git tag --delete 태그
- git tag -d 태그
정리
버전 관리 명령어
최근 커밋과 작업 디렉터리 비교
커밋한 이후로 작업 디렉터리에서 무엇을 수정했는지 확인하기 위해 아래의 명령어 사용
- git diff
최근 커밋과 스테이지 비교
스테이지에 추가된 항목과 최근 커밋의 차이를 비교하기 위해 아래의 명령어 사용
- git diff --staged
커밋간 차이 확인
- git diff 커밋해시 커밋해시
주의해야할 점은 왼쪽 커밋을 기준으로 오른쪽 커밋에서 달라진 점을 출력한다는 것이다.
HEAD를 기준으로 커밋 비교
HEAD는 현재 브랜치의 최신 커밋을 가리킨다.
따라서 HEAD^ 또는 HEAD~1은 현재 브랜치의 최신 커밋에서 하나 이전 커밋을 가리킨다.
HEAD^^ 또는 HEAD~2는 최신 커밋에서 두 개 이전 커밋을 가리킨다.
따라서 HEAD 뒤에 붙는 ^의 개수 또는 HEAD~ 뒤에 붙는 숫자는 HEAD에서 몇 번째 이전을 나타내는지를 말한다.
- git diff HEAD^
- git diff HEAD~N
브랜치끼리 비교
- git diff 브랜치명 브랜치명
왼쪽 브랜치를 기준으로 오른쪽 브랜치에서 달라진 점을 출력한다.
reset
커밋해시에는 돌아갈 커밋 해시를 입력한다.
커밋해시 대신에 HEAD^나 HEAD~N을 넣어도 된다.
soft reset
- git reset --soft 커밋해시
mixed reset
- git reset --mixed 커밋해시
hard reset
- git reset --hard 커밋해시
revert
revert는 해당 커밋을 취소한 새로운 커밋을 추가하는 방식이다.
즉, 해당 커밋으로 되돌아간 상태를 새롭게 커밋하는 것이다.
커밋해시 대신에 HEAD^나 HEAD~N을 넣어도 된다.
- git revert 커밋해시
revert 명령어는 Vim 창이 나타난다.
stash
스태시 명령은 기본적으로 tracked 상태의 파일에 대해서만 사용할 수 있다.
- git stash
- git stash -m "메시지"
- git stash -message "메시지"
stash list
스태시한 리스트를 조회하는 명령어는 아래와 같다.
- git stash list
최근에 stash한 작업일 수록 {}안에 들어가는 숫자가 작다.
메시지를 입력하지 않은 스태시
WIP는 Work In Porgress의 준말이고, 어느 브랜치에서 스태시 되었는지, 스태시가 만들어진 커밋해시, 스태시가 만들어졌던 커밋 메시지가 출력된다.
stash 적용
아래의 명령어는 임시 저장한 stash를 다시 불러오는 것이다.
스태시번호를 입력하지 않을경우 가장 최근에 스태시(stash@{0})한 것이 불러와진다.
- git stash apply stash@{N}
stash 삭제
- git stash drop stash@{N}
스태시 전체삭제
git stash clear
작업중인 브랜치 확인
- git branch
브랜치 만들기
- git branch 브랜치명
브랜치 체크아웃
- git checkout 브랜치명
브랜치를 만듦과 동시에 체크아웃
- git checkout -b 브랜치명
브랜치 병합
- git merge 브랜치명
충돌 해결
병합 과정에서 충돌이 발생할 수 있다.
그러면 해당 파일에서 직접 수정해야한다.
즉, 어떤 브랜치의 내용으로 내용을 병합할지 선택해야 한다.
나는 master 브랜치의 내용 선택(현재 HEAD가 master 최신 커밋이므로)하겠다.
이후 스테이지에 추가하고, 커밋하면 성공적으로 병합이된다.
브랜치 삭제
- git branch --delete 브랜치명
- git branch -d 브랜치명
브랜치 재배치
먼저 재배치하려는 브랜치로 체크아웃 한 뒤 아래의 명령어를 입력해야한다.
- git rebase 브랜치명
이렇게 되면 master 의 최신 커밋 부분에 foo 브랜치가 재배치 된 것이다.
정리
GitHub(원격 저장소)와 상호작용
clone
- git clone repository주소
특정 경로로 클론받기
git clone repository주소 클론받을경로
로컬 저장소에 원격 저장소 추가
- git remote add 원격저장소이름 repository주소
이렇게 하면 해당 원격 저장소와 상호작용할 수 있다.
추가된 원격 저장소 목록
- git remote
원격 저장소 이름 바꾸기
- git remote rename 기존이름 바꿀이름
원격 저장소 삭제
- git remote remove 원격저장소이름
push
로컬 저장소에서 작업을 하고, 커밋을 한뒤 아래의 명령어를 입력한다.
- git branch -M main
- git push -u origin main
위 명령어는 현재 체크아웃 된 브랜치(master) 이름을 main으로 변경하고, 원격 저장소 origin으로 로컬 저장소 main 브랜치의 변경사항을 푸시하는 명령이다.
브랜치 이름을 변경하였다면 아래의 명령어만으로 푸시하면 된다.
- git push -u origin main
fetch
- git fetch
- git fetch 원격저장소이름
원격 저장소로 체크아웃
- git checkout 원격저장소명/브랜치명
- git checkout FETCH_HEAD
git checkout FETCH_HEAD 명령어는 최근에 패치한 브랜치의 최신 커밋으로 체크아웃 한다.
pull
pull은 fetch와 merge를 동시에 하는 것이다.
- git pull
- git pull 원격저장소명
pull request
- 기여하려는 저장소를 본인 계정으로 포크
- 포크한 저장소 클론
- 브랜치 생성 후 생성한 브랜치에서 작업하기
- 작업한 브랜치 푸시
- 풀 리퀘스트
이미 원격 저장소를 포크한 이후에 커밋이 뒤쳐져 있다면
1, 2, 3, 4 번 작업까지 완료하였다면 깃허브로 돌아가서
정리
'Git & GitHub' 카테고리의 다른 글
[GitHub] 소스트리로 clone, push, fetch, pull, pull request 하기 (1) | 2023.12.28 |
---|---|
[Git] 소스트리(Sourcetree)로 브랜치(Branch) 다루기 (2) | 2023.12.27 |
[Git] 버전 비교, 커밋 되돌리기, 임시 저장 (+소스트리 실습) (1) | 2023.12.26 |
[Git] 소스트리로 태그 만들기(+커밋 해시 개념) (1) | 2023.12.26 |
[Git] 소스트리(Sourcetree)로 커밋(commit)하기 (0) | 2023.12.25 |