프로그래밍 언어/git

깃 명령어 정리... 어렵다 진짜

tteokbokki-master 2023. 8. 18. 23:35

 

git init

 

현재 파일을 git으로 관리하겠다는 것

 

 

git status

 

현재 파일의 상태를 알려줌

 

 

.gitignore

파일을 생성 후 

파일 이름을 넣어주면

 

그 파일을 git에서 배제 할 수 있다.

 

 

[.gitignore 형식]

 

 

# 모든 file.c

file.c

 

# 최상위 폴더의 file.c

/file.c

 

# 모든 .c 확장자 파일

*.c

 

# .c 확장자지만 무시하지 않을 파일

!not_ignore_this.c

 

# logs란 이름의 파일 또는 폴더와 그 내용들

logs

 

# logs란 이름의 폴더와 그 내용들

logs/

 

# logs 폴더 바로 안의 debug.log와 .c 파일들

logs/debug.log

logs/*.c

 

# logs 폴더 바로 안, 또는 그 안의 다른 폴더(들) 안의 debug.log

logs/**/debug.log

 

 

 

git add . 

 

캡슐에 모든 파일 담기

 

git commit -m “메세지”

 

커밋 메세지 작성 (버전 나누기)

 

 

git log

 

커멋 기록 확인

:q 입력하면 종료

 

 

 

 

reset 방식 : 원하는 시점(커밋)으로 돌아간 뒤 이후 내역들을 삭제

 

revert 방식 : 되돌리기 원하는 시점의 커밋을 거꾸로 실행

 

 

reset 방식을 통해 원하는 시점으로 돌아가기

 

git log를 통해 커밋 내역을 확인한다.

돌아갈 시점의 커밋 해시를 복사한다.

 

git reset —hard (돌아갈 커밋 해시)

를 입력하면 돌아갈 시점으로 돌아간다.

 

 

 

revert를 통해 과거의 커밋 되돌리기

 

 

git revert (되돌릴 커밋 해시)

:wq로 커밋 메세지를 저장하면 된다

 

커밋하지않고 revert를 하기 위해서는

 

git revert —no-commit (되돌릴 커밋해시)

이후 원하는 다른 작업을 추가한 뒤 함께 커밋하면된다. 입력하면 된다.

 

 

만약 revert를 통해 과거 커밋으로 되돌아가려는데, 그 시점에서 지워진 커밋이 이후에서 수정되는 경우 충돌이 발생한다

 

이렇게 되면 충돌이 발생하는 파일을 지우고

git revert —continue 를 입력하면 된다.

 

 

 

아직 커밋되지않은 것들을 다 지우고 그냥 마지막 커밋으로 돌아가고 싶을 때는

git reset —hard 를 입력하면 된다.

 

 

 

 

 

 

Branch : 분기된 가지 (다른 차원)

 

여러 작업들이 각각 독립되어 진행될 때

ex) 신기능 1, 신기능 2, 코드 개선, 수정, 등등

 

 

git branch 브랜치이름

브랜치 생성

 

git branch

브랜치 목록 확인

 

git switch 브랜치이름

브랜치이름으로 이동

 

git branch -d (삭제할 브랜치명)

브랜치 삭제

 

git branch -m (기존 브랜치명) (새 브랜치명)

브랜치 이름 바꾸기

 

git branch -D (강제삭제할 브랜치명)

지워질 브랜치에만 있는 내용의 커밋이 있는 경우

 

 

 

 

branch 병합

 

merge 방식과

Rebase 방식이 있다.

 

merge는 두 개의 가지를 이어 붙이는 것

이 과정 속에서 커밋 하나가 더 생긴다 

 

rebase는 브랜치의 마디, 커밋들을 대상 브랜치로 옮겨붙이는 것

 

 

rebase는 옮겨 붙이기에, 히스토리가 한 줄로 깔끔하게 정리되지만 merge는 브랜치의 흔적을 남긴다. 

 

즉 merge는 브랜치를 전부 놔두고 끝에만 모아서 병합하니까 잔가지가 남고, rebase는 곁 가지를 싹 다 잘라다가 몸통 줄기에 이어 붙이니 히스토리가 깔끔하게 한 줄로 유지할 수 있는 것

 

브랜치의 사용기록을 남겨둘 필요가 있으면 merge

히스토리를 깔끔하게 만드는게 중요하면 rebase를 사용하면 됨

팀원들끼리 공유된 협업에 대해서는 rebase를 사용하지 않는게 좋음

 

 

 

  1. merge로 합치기

 

git merge 브랜치이름(가지)

 

줄기 브랜치로 이동을하고(중요), 붙일 가지 브랜치 이름을 넣는다

 

예를 들어 add 브랜치를 main 브랜치로 merge하고 싶을 때

main 브랜치로 이동 후 

git merge add를 입력하면 된다.

 

 

merge또한 하나의 커밋이기에 혹시라도 조졌다 싶을때 reset을 통해 되돌릴 수 있다.

 

 

병합된 이후 브랜치는

git branch -d 브랜치이름

을 통해 지워준다.

 

 

 

  1. rebase로 합치기

 

git rebase 브랜치이름(줄기)

 

가지 브랜치로 이동을 하고, 줄기 브랜치 이름을 넣는다.

merge때와는 반대

 

예를 들어 add브랜치를 main 브랜치로 rebase하고 싶을 때, add브랜치로 이동 후

git rebase main을 입력하면 된다.

 

이후 소스트리를 확인해보면 add 브랜치가 marge를 앞서고 있는 것이 보인다.

이때 main 브랜치로 이동 이후

 

git merge add를 입력해서 통합한 뒤

git branch -d add를 통해 add 브랜치를 지워주면 끝이다.

 

 

 

merge 충돌

 

충돌이 났을 때 충돌 부분을 수정한 뒤

git add . 

git commit을 통해 병합 완료하면 된다.

 

git merge --abort

당장 충돌 해결이 어려울 경우 위의 명령어를 통해

merge를 중단한다.

 

 

 

rebase 충돌

 

충돌 부분을 수정한 뒤 

git add.

git rebase —continue 를 통해 병합을 완료하면 된다.

 

 

git rebase --abort

당장 충돌 해결이 어려울 경우 위의 명령어를 통해

rebase를 중단한다.

 

 

[로컬에 원격 저장소 추가 후 푸시]

 

 

git remote add origin (원격 저장소 주소)

 

로컬의 git 저장소에 원격 저장소로의 연결을 추가한다.

원격 저장소 이름을 흔히 origin으로 사용한다.

 

현재 브랜치에서 어떤 원격의 어떤 브랜치로 

기본 설정을 할 것인가를 지정

 

대상 원격 브랜치를 이렇게 지정해놓으면 이후에는

git push만 입력해도 올라간다.

 

 

git branch -M main

기본 브랜치명을 main으로 변경

 

git push -u origin main

로컬 저장소의 커밋 내역들을 원격으로 push한다.

 

 

git remote

git remote -v

를 입력하면 원격 목록을 볼 수 있다

 

 

 

 

[github에서 프로젝트 다운]

 

 

git clone (원격 저장소 주소)

 

 

git push

커밋 밀어올리기

 

git pull

원격의 커밋 당겨오기

 

 

 

git pull -no-rebase    merge방식

로컬과 원격의 어긋난 시간선을 한 곳에 모은 다음에

그걸 push하면 됨

 

git pull —rebase    rebase 방식

원격에 맞춰서 일단 원격꺼를 붙이고

내가 한 걸 잘라서 그 다음에 붙인다.

그래서 push하면 내 프로젝트와 공유될 프로젝트가

싱크로나이즈가 됨

 

 

 

로컬에서 브랜치 만들어서 원격에 push 

 

—set-upstream은

-u로 축약될 수 있다

 

 

 

remote는 원격(깃허브)의 브랜치를 만드는 것

그래서 push -u remote main은

원격에 있는 main 브랜치에 push한다는 뜻!!!

 

git branch -a 를 입력하면

로컬상의 branch와 원격상의 branch를 둘 다 볼 수 있다.

 

 

 

[로컬에서 브랜치 만들어 원격에 push 하기]

 

from-local 브랜치 만든 후

git push를 하면 보낼 대상이 없기 때문에 오류가 생긴다

 

git push -u origin from-local

 

로컬의 from-local 브랜치를

원격의 origin 브랜치로 이동시키겠다는 경로를 설정하는 것

 

 

[원격의 브랜치 로컬에 받아오기]

 

git fetch

원격의 변경사항을 확인할 수 있다.

이후 git branch -a로 확인하자

 

git switch -t origin/from-remote

 

origin 원격에서  로컬로 from-remote 복사한 다음에

이후로도 계속 local의 from브랜치는 

원격의 from브랜치와 연결하겠다는 뜻

 

원격의 브랜치를 로컬의 브랜치로 받아오고

앞으로 로컬 브랜치의 경로를 원격 브랜치로 지정함

-u 와 비슷한 기능

 

git push (원격 이름) —delete (원격의 브랜치명)

원격의 브랜치 삭제

예를 들어 

git push origin —delete from-remote

를 쓰면 origin 원격의 from-remote 브랜치를 지운다는 뜻이된다