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를 사용하지 않는게 좋음
- merge로 합치기
git merge 브랜치이름(가지)
줄기 브랜치로 이동을하고(중요), 붙일 가지 브랜치 이름을 넣는다
예를 들어 add 브랜치를 main 브랜치로 merge하고 싶을 때
main 브랜치로 이동 후
git merge add를 입력하면 된다.
merge또한 하나의 커밋이기에 혹시라도 조졌다 싶을때 reset을 통해 되돌릴 수 있다.
병합된 이후 브랜치는
git branch -d 브랜치이름
을 통해 지워준다.
- 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 브랜치를 지운다는 뜻이된다