git 명령어 정리

전혜린·2024년 3월 5일
0

Today I Learned

목록 보기
62/64

reset: 원하는 시점으로 돌아간 뒤 이후 내역들을 지움
revert: 되돌리기 원하는 시점의 커밋을 거꾸로 실행
merge: 두 브랜치를 한 커밋에 이어붙임

  • 브랜치 사용내역을 남길 필요가 있을 때 적합한 방식
    rebase: 브랜치를 다른 브랜치에 이어붙임
  • 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합

merge, rebase를 할 경우 커밋 하나가 더 생김
새로생긴 커밋은 원래 브랜치와 병합된 브랜치의 모든 변화들이 다 담김

소스트리
머지 = 병합
리베이스 = 재배치

프로젝트의 변경사항들을 타임캡슐(버전)에 담기
변경사항 확인
$git status
파일 하나 담기
$git add tigers.yaml
git status로 확인
모든 파일 담기
$git add.
git status로 확인

타임캡슐 묻기
커밋 메시지까지 함께 작성하기
$git commit -m 'first commit'
아래 명령어와 소스트리로 확인
$git log

add와 commit 한꺼번에
$git commit -am '메시지'

  • 새로 추가된(Untracked) 파일이 없을 때 한정

reset 사용해서 과거로 돌아가기
아래 명령어로 커밋 내역 확인
$git log
$git reset --hard (돌아갈 커밋 해시)

브랜치 생성
$git branch 브랜치명

브랜치 목록 확인
$git branch

add-coach 브랜치로 이동
$git switch add-coach

브랜치 생성과 동시에 이동하기
$git switch -c new-teams

  • 기존의 $git checkout -b (새 브랜치명)

로컬 브랜치 삭제
$git branch -d 브랜치명
브랜치 강제 삭제
$git branch -D 브랜치명

  • 지워질 브랜치에만 있는 내용의 커밋이 있을 경우, 즉 다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때는 -d 대신 -D(대문자)로 강제 삭제해야 함

원격 브랜치 삭제
$git push origin --delete 원격 브랜치 이름

브랜치 이름바꾸기
$git branch -m (기존 브랜치명) (새 브랜치명)

  • -m 은 move의 약자

merge로 합치기
$git merge --no-ff feature/SGS-000_hotfix-4th

예시)
add-coach 브랜치를 main 브랜치로 merge
1. add-coach 브랜치 지금까지 작업한 것을 commit 하고 push
2. main 브랜치로 이동
3. 아래의 명령어로 병합
$git merge add-coach
4. 내 로컬에서만 merge 된 상태이기 때문에 main 브랜치에서 push하기
5. 소스트리로 확인
6. 병합된 브래치는 삭제
$git branch -d add-coach

rebase로 합치기
new-teams 브랜치를 main 브랜치로 rebase
1. new-teams 브랜치로 이동 (merge와 반대임, rebase할 브랜치로 이동을 해야함)
2. 아래의 명령어로 병합
$git rebase main
3. 소스트리에서 상태 확인
main 브랜치는 뒤쳐져 있는 상황
4. main 브랜치로 이동 후 아래 명령어로 new-teams 시점으로 fast-forward
$git merge new-teams
5. new-teams 브랜치 삭제

충돌 해결하기
merge 충돌 해결하기
1. $git merge conflict-1로 병합 시도하면 충돌 발생
2. 오류 메시지와 $git status 확인
3. 당장 충돌 해결이 어려울 경우 아래 명령어로 merge 중단
$git merge --abort
4. 해결 가능 시 충돌 부분을 수정한 뒤 $git add .$git commit으로 병합 완료
5. conflict-1 브랜치 삭제

rebase 충돌 해결하기
1. conflict-2에서 $git rebase main으로 리베이스 시도하면 충돌 발생
2. 오류 메시지와 $git status 확인
3. 당장 충돌 해결이 어려울 경우 아래 명령어로 rebase 중단
$git rebase --abort
4. 해결 가능 시 충돌 부분을 수정한 뒤 git add .
5. 아래 명령어로 계속
$git rebase --continue
6. 충돌이 모두 해결될 때까지 반복
7. main에서 $git merge conflict-2로 마무리
8. conflict-2 브랜치 삭제

github에서 프로젝트 다운받기
터미널이나 git bash에서 대상 폴더 이동 후
$git clone (원격 저장소 주소)

원격으로 커밋 밀어올리기(push)
$git push

  • 이미 git push -u origin main으로 대상 원격 브랜치가 지정되었기 때문에 가능

원격의 커밋 당겨오기(pull)
$git pull

pull 할 것이 있을 때 push를 하면?
push 해보기
-> 원격에 먼저 적용된 새 버전이 있으므로 적용 불가
pull 해서 원격의 버전을 받아온 다음 push 가능
push 할 것이 있을 시 pull하는 두 가지 방법
1. merge 방식
$git pull --no-rebase
push하기
2. rebase 방식
$git pull --rebase
push하기

로컬의 내역 강제 push해보기
$git push --force

로컬에서 브랜치 만들어 원격에 push 해보기
1. from-local 브랜치 만들기
2. 아래 명령어로 원격에 push
아래와 같이 하면 대상을 명시하라는 메시지 나타남
$git push
아래 명령어로 원격의 브랜치 명시 및 기본설정
$git push -u origin from-local
3. 브랜치 목록 살펴보기
아래 명령어로 로컬과 원격의 브랜치들 확인
$git branch --all

Git 의 3가지 공간
Working directory -> add
Staging area -> commit
Repository

  1. Working directory
    untracked: add된 적 없는 파일, ignore된 파일
    tracked: add된 적 있고 변경내역이 있는 파일
    git add 명령어로 Staging area로 이동
  2. Staging area
    커밋을 위한 준비 단계
    git commit 명령어로 repository로 이동
  3. Repository
    git directory라고도 불림
    커밋된 상태

파일 삭제
$git rm tigers.yaml
파일의 삭제가 Staging area에 있음

파일의 이동
$git mv
git mv tigers.yaml zzamtigers.yaml

파일을 staging area에서 working directory로
git restore --staged (파일명)

  • --staged를 빼면 working directory에서도 제거

reset의 세 가지 옵션
--soft: repository에서 staging area로 이동
--mixed(default): repository에서 working directory로 이동
--hard: 수정사항 완전히 삭제

로컬에 있는 브랜치 목록 확인
$git branch
원격에 있는 브랜치 목록 확인
$git branch -r

원격저장소의 브랜치 가져오기 -> $git remote update로 갱신 먼저하기~!
$git checkout -t origin/브랜치명
git checkout -t origin/feature/target-branch
-t 옵션과 원격 저장소의 branch 이름을 입력하면 로컬에 동일한 이름의 branch를 생성하면서 해당 branch로 checkout 함
-t에서 t는 track의 줄임말

원격저장소의 브랜치 가져오기 - branch 이름 변경하여 가져올 때
$git checkout -b [생성할 branch 이름] [원격 저장소의 branch 이름]

같은 파일을 수정해서 충돌이 일어난 경우
같은파일을 pull 받아야 한다는 것을 아는 상황일 경우
1) 내가 작업하던 파일을 스태시에 넣어놓음
2) pull 받음
3) 스태시 적용 누르면 커밋하지 않은 변경사항에 다시 생김
같은파일을 pull 받아야 한다는 것을 모르는 상황일 경우
1) pull을 눌렀는데 충돌
2) 마지막 커밋 시점으로 git reset --mixed
3) 스태시에 넣어놓기
4) pull 받기
5) 수정하지 않은 부분들은 폐기

overwritten by merge 해결방법 (로컬브랜치와 원격브랜치의 충돌)
1. $git stash
2. $git pull
3. $git stash pop

git stash 뜻
현재 디렉토리의 파일을 임시로 백업하고 깨끗한 상태로 돌림
버전관리 되는 대상 파일들을 임시저장 해둔다고 보면 됨
해당 명령어를 통해 현재 Staging 영역에 있는 파일의 변경사항을 스택에 넣어둠
$git pull
원격 저장소에서 내 로컬 브랜치로 변경사항을 적용
$git stash pop
적용 후 리스트에서 삭제
$git stash apply
적용 후에도 리스트에 유지

git이 추적하지 않는 untracked files 한꺼번에 삭제하기
untracked 파일 모두 지우기
$git clean -f
디렉터리까지 지우기
$git clean -fd

브랜치를 변경하지 않고도 현재시점에서 지워진 파일 복구하는 명령어
$git checkout 커밋아이디(커밋해쉬) 특정파일경로

파일 추가된 이력 조회 명령어(커밋해쉬까지 뜸!) -> d 누르면 다음으로 이동
$git log --all --diff-filter=A --summary

현재 디렉토리에 있는 모든 변경 사항을 버리고 원상태로 돌아가기
$git restore .
$git checkout .

커밋메시지 수정
최근 commit 수정하기
1) $git commit --amend -m '수정할 메시지'
2) $git commit --amend -> i 눌러서 메시지 수정 -> esc 후 :wq(저장 + 창닫기)

이전 Commit 메시지 수정하기 & 한번에 여러 Commit 수정
$git log -> 지금까지 커밋한 기록 확인

$git rebase -i HEAD~원하는개수

// 위에서 부터 세 번째 커밋을 수정하고 싶으면
$git rebase -i HEAD~3

i 눌러서 메시지 수정(pick -> reword) - esc 후 :wq
커밋을 수정할 수 있는 창이 띄워지면, i 눌러서 메시지 수정 - esc 후 :wq
순서대로 띄워지기 때문에 위와 같은 순서 차례로 반복

커밋취소
꺽쇠 수만큼 이전으로 돌아가게 하는 명령
^ (한단계 앞)
^^ (두단계 앞)
~숫자 로도 가능

1) add하기 전 상태, unstaged 상태
commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에 보존

마지막 commit을 취소. 하나를 되돌림
$git reset HEAD^ ----> $git reset --mixed HEAD^와 동일 (mixed는 기본옵션)
$git reset HEAD~1
마지막 2개의 commit을 취소
$git reset HEAD^^
$git reset HEAD~2

2) add한 상태, staged 상태
commit을 취소하고 해당 파일들은 staged 상태로 워킹 디렉터리에 보존
$git reset --soft HEAD^

3) add하기 전 상태, unstaged 상태
commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에서 삭제
워킹 디렉터리의 파일 삭제. 즉 모두 취소. 작업내용 다 사라지니까 왠만하면 사용X
$git reset --hard HEAD^

스테이지(stage)에서 제외
$git restore --staged 파일명

스테이지에서 전체 파일 제외
$git restore --staged .

git에서 . 은 모든 파일을 의미한다

변경 파일을 원상복구
$git restore <file name>

특정 파일의 수정 이력을 확인
$git blame 파일명
각 라인별로 누가, 언제 마지막으로 수정 했는지 알 수 있습니다.

$git show 커밋해시값
blame 명령어 입력하면 커밋해시값 뜸

현재 브랜치의 가장 최근 커밋 정보를 확인
$git show

커밋해시값 보기
$git log

여러 커밋(commit) 하나로 합치기
1) $git rebase -i HEAD~원하는개수
2) i 눌러서 메시지 수정(pick -> s) - esc 후 :wq (남길거는 그대로 유지)
ex) 1번 커밋 남길거면 '커밋 메시지 2, 3'의 pick을 s로 변경
3) 커밋을 수정할 수 있는 창이 띄워지면, i 눌러서 메시지 수정 - esc 후 :wq
4) 저장소에 강제 Push 하기
일반적으로 push를 진행하게 되면 저장소와 로컬의 commit 히스토리가 달라 정상적으로 진행되지 않는다.
$git push -f

rebase 작업 중 취소하고 돌아가고 싶을땐 --abort 명령어를 사용하여 돌아갈 수 있다.
$git rebase --abort

커밋을 비교하여 변경된 파일의 목록을 뽑는 방법
$git diff --name-status <old_commit> <new_commit>

240317 추가

echo "# suwon" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/JEON-HYERIN/suwon.git
git push -u origin main

profile
코딩쪼아

0개의 댓글