git push 전에 git pull 해야 하는 경우가 많다.
ex) premium 브랜치의 License 파일을 수정해야 함
- 리모트 레포지토리 > premium 브랜치 > License
# 기본 라이센스
Premium
- 로컬 레포지토리 > premium 브랜치 > License (수정)
# 기본 라이센스
Premium
- Enterprise use : 500$ per month
위와 같이 로컬 레포지토리의 License 파일을 수정했다. 그러나, 이 작업을 하고 있을 때 다른 개발자 B가 먼저 License 파일을 수정하여 git push 를 실행했다.
- 리모트 레포지토리 > premium 브랜치 > License (B가 수정)
# 기본 라이센스
Premium
- Educational use: 10$ per month
이 상황에서, 나는 리모트 레포지토리가 수정된 지 모르고, git add . 후 git push 하려 했다. 그랬더니, 아래 처럼 오류가 발생했다.

현재 리모트 레포지토리에 다른 내용이 있기 때문에, 내 코드를 바로 git push 할 수 없다.
-> git pull 을 먼저 한 후 내용을 추가하여 다시 git push 해야함
그러나, 현재 로컬 레포지토리와 리모트 레포지토리의 내용이 다르기 때문에 pull 시에도 conflict 가 발생한다. 이때, 이전에 학습한 conflict 발생 시 해결 방법 중 merge 후 코드 수정 방법을 사용하면 된다.
(왜인지, git pull 로는 바로 pull 이 안돼서, 옵션을 추가했다.)
git pull --no-rebase
위 커맨드를 실행시키면 이전처럼 conflict 가 발생한 채로 merge가 되는데, 이때 License 파일을 수정한 후 git add . 을 실행시키면 정상적으로 add 및 push 가 가능하다.

위 상황에서는 git pull 보다 git fetch가 적절하다.
- git fetch : 리모트 레포지토리에 있는 브랜치 내용을 일단 가져와서 살펴본 뒤 merge 하고 싶을 때 사용
만약 리모트 레포지토리의 브랜치에 문제가 있다면,
해결 방법
- 잘못된 코드를 추가한 개발자에게 수정하고 다시 리모트 레포지토리에 올려달라고 하기
- 잘못된 부분을 알아서 수정하고 다시 git push 하기
2번 방법을 위해 fetch를 사용할 수 있다.

위 사진과 같이 git fetch를 통해 (리모트 레포지토리 > premium 브랜치 -> 로컬 레포지토리 > premium 브랜치) 로 내용을 가져온다.
이후, git diff 커맨드 사용
git diff [현재 브랜치][비교할 브랜치]

내용 비교 후, 잘못된 부분을 수정하기 위해 로컬 레포지토리로 merge. 잘못된 부분 수정 후 git add . -> git push
따라서, git pull = git fetch + merge 와 같다.
이미 리모트 레포지토리에 올라간 commit 을 취소해야 할때
- git revert [커밋 아이디] -> git push
잘못된 코드를 git add . -> git push 했을 때,
git revert 로 커밋을 되돌린 후, 다시 git push 로 리모트 레포지토리에 적용
여러개 commit 한번에 취소
- git revert [커밋 아이디1]..[커밋 아이디2] : [커밋 아이디1]+1 ~ [커밋 아이디2] 까지 커밋 모두 취소 (커밋 아이디1 다음 커밋 부터 삭제됨. 시작 인덱스 포함 X)

12a4 : Create README.md
06d5 : Make README.me look nice
-> 12a4 다음 커밋인 0349 커밋 부터 06d5 커밋까지 삭제 (2개 삭제)
Git 협업 정리
- git fetch : 로컬 레포지토리에서 현재 HEAD 가 가리키는 브랜치의 업스트림(upstream) 브랜치로부터 최신 커밋들을 가져옴
- git blame : 특정 파일의 내용 한줄한줄이 어떤 커밋에 의해 생긴 것인지 출력
- git revert : 특정 커밋에서 이루어진 작업을 취소하는 커밋 생성
'Git' 카테고리의 다른 글
| branch (1) | 2024.12.31 |
|---|---|
| Commit (1) | 2024.12.31 |
| Github 사용법 (0) | 2024.12.31 |
| Git 사용법 (0) | 2024.12.30 |