공부기록

Git & Github 정리 (1)

메델 2023. 1. 18. 22:45

1. git init 

: 작업 폴더에서 git을 쓰고 싶으면 git init 입력 

 

2. git add 파일명

    git commit-m '메시지'

: 파일 현재 상태를 기록(버전 만들기)

 

staging area는 git add를 commit할  파일을 선택해 놓는 곳(staging area에 파일을 넣는 행위를 staging이라 한다)

→ git commit을 통해 repository로 옮긴다.

1) 여러 파일을 staging 하려면 git add 파일1 파일2..

2) git add . 는 모든 파일을 staging 

3) git status는 지금까지 변경된 파일, staging된 파일을 알려준다.

4) git log --all --oneline은 commit 내역 조회 

 

3. git diff

: 최근 commit 파일과 현재 파일의 차이점을 보여줌 

commit 전에 파일 차이점을  확인하는 습관을 가지자 

 

4. git difftool 

: git diff 명령어보다 시각적으로 보기 좋음 :q나 :qa는 종료

 

노란색 글씨가 commit의 아이디

git difftool 커밋아이디는 현재 파일과 특정 commit을 비교할 수 있다.

git difftool 커밋아이디1 커밋 아이디2 명령어는 특정 커밋과 특정 커밋을 비교할 수 있다.

하지만 git difftool보다 아래와 같은 확장 프로그램을 사용하는 것이 좋다

 

5. git branch 브랜치명

:브랜치를 생성해준다. branch란 프로그램 복사본이다.

 

6. git switch 브랜치명

:브랜치로 이동

 

7. git merge 브랜치명

: master(main)브랜치에 합칠때 사용

(merge해도 브랜치는 남아 있다 merge가 완료된 브랜치 삭제는 git branch -d 브랜치명으로 한다. merge 안한 branch 삭제의 경우 git branch -D 브랜치명이다.)

똑같은 파일에 똑같은 줄을 수정하는 경우 충돌이 발생한다. 이런 것들은 직접 해결해 주어야 한다.

git merge시 conflict 발생

confilt 해결법은

1) 원하는 코드만 남긴다.

2) git add 

3) git commit

 

7. 다양한 merge 방법

1) 3-way merge

: 아래와 같이 branch에 각각 commit이 1회 이상 있는 경우 

merge 명령을 내리면 두 브랜치의 코드를 합쳐 새로운  commit을 자동으로 생성한다. 

이것이 merge의 기본 동작 방식이다.

2) fast-forward merge

:  아래와 같이 새로운 branch에만 commit이 있고 기준이 되는 브랜치에는 신규 commit이 없는 경우 

merge하게되면 자동으로  fast-forward merge가 된다.

fast-forward merge란 합칠게 따로 없으므로 신규 브랜치의 이름을 main(master)라고 하는 것이다.

3) rebase and merge

: rebase란 브랜치의 시작점을 다른 commit으로 옮겨주는 행위를 뜻한다. 

 

(1) rebase를 이용하여 신규 브랜치의 시작점을 main(master) 브랜치 최근 commit 으로 옮긴 다음

(2) fast-forward merge를 하는 것 

rebase and merge는 일반적인 merge와 달리 main(master) branch가 아닌 새로운 브랜치로 이동해서 git rebase main을 한다.

그럼 branch가 main으로 이동하게 되는데 그걸 fast-forward merge한다.

git switch 새로운 브랜치
git rebase master

git switch master
git merge 새로운 브랜치

rebase의 경우 branch끼리 차이가 너무 많이 나는 경우 rebase하면 충돌이 많이 발생하는 단점이 있다.

 

4) squash and merge

: 모든 branch를 3-way merge하는 경우 3-way merge된 것들이 매우 복잡해 보일뿐만 아니라 master(main) branch에서 보면 3-way merge된 branch들의 commit 내역도 모두 출력되어 지저분해보인다. 

→ rebase나 squash and merge를 사용하는 새로운 branch에 있던 commit 들을 연결하는게 아니라  master(main) branch에 이어 붙여주기 때문에 복잡해보이거나 지저분해 보이지 않는다.

squash and merge 하는 법은 간단하다. --squash 옵션만 추가해주면 끝이다.

 

git switch master
git merge --squash 브랜치명
git commit -m "메세지"

 

8. git restore

1) git restore 파일명

: 최근 commit된 상태로 현재 파일의 수정 내역을 되돌릴 수 있다.

 

2) git restore -- source 커밋아이디 파일명

: 입력된 파일이 특정 커밋아이디 시점으로 복구된다.

 

3) git restore -- staged 파일명

: 특정 파일을 staging 취소 

 

9. git revert 커밋 아이디

:commit 취소 , revert 명령어를 쓰면 특정 commit 에서 있었던 일을 지울 수 있다.

  • revert 할때 동시에 여러 개의 commit id 입력 가능
  • 최근 했던 commit만 revert 하고 싶다면 git revert HEAD
  • merge 명령으로 인해 새로 만들어진 commit도 revert가 가능하다.

 

9. git reset --hard  커밋아이디

: 해당 commit이 생성될 때로 시간을 되돌려 준다. 협업할 때 사용하지 말자 

 

 

 

 

(참고 : 매우 쉽게 알려주는 git& github - 코딩애플 ) 

'공부기록' 카테고리의 다른 글

Git & Github 정리 (2)  (0) 2023.01.19