: 병합 대상 브랜치가 현재 브랜치의 최신 커밋에서 출발한 경우 발생
main브랜치에서 파생한 dev_ggr 브랜치에서 새로운 커밋 후
$ git checkout main으로 main 브랜치로 이동
$ git merge dev_ggr하면 main 브랜치에서 dev_ggr을 병합
: 병합하려는 브랜치들이 서로 다른 변경사항을 포함할 때 발생
main브랜치에서 파생한 dev_pwd 브랜치에서 새로운 커밋 후
$ git checkout main 으로 main 브랜치로 이동
main에서 새로운 커밋
→ 즉, dev_pwd에서도 main에서도 커밋이 생성 되어 있는 상태이기 때문에 충돌 발생 가능성 있음
main 에서 $ git merge dev_pwd 하면 VI 에디터 켜짐

여기에서 : wq 하면 빠져나옴

$ git log로 확인 가능

main브랜치에서 파생한 dev_ggr 브랜치를 만들고
dev_ggr에서 파일을 수정한 후
git status 하면

커밋 후 checkout main
main 브랜치에서 동일 파일을 수정하면

→ 같은 파일을 dev_ggr 에서도, main에서도 수정한 상황에서
main에서 dev_ggr 통합
CONFLICT (content): Merge conflict in 초기세팅-main.txt을 통해 초기세팅-main.txt 파일에서 병합 충돌 발생을 알 수 있음$ git status 로 충돌 파일 볼 수 있음
해당 파일에 들어가보면 아래처럼 충돌이 난 부분을 확인할 수 있음
<<<<< 현재 브랜치의 내용 ====== dev_ggr 브랜치의 내용 >>>>> 이 표시됨

파일을 편집하여 충돌 표시를 제거하고, 어떤 내용을 유지할지 결정
저장 후 add & commit
: 특정 커밋으로 되돌림
: 커밋 로그 정보만 제거
마지막 커밋의 로그 이름을 변경하고 싶을 때 사용

: 커밋 로그 & staging 영역 제거


: 커밋 로그 & staging 영역 & 작업 디렉터리 내용 제거


: git 의 모든 커밋된 정보를 저장


: 여러 개의 커밋을 하나로 합치거나, 불필요한 커밋을 제거하거나 수정
Pull Request를 보내기 전 rebase해서 커밋 로그를 깔끔하게 정리해서 PR요청
: 커밋을 선택하여 그대로 유지한다는 의미
: 여러 커밋을 하나의 커밋으로 합치고 싶을 때 사용
스쿼시할 커밋의 내용은 이전 커밋에 병합
스쿼시된 커밋의 메시지는 이전 커밋 메시지와 함께 편집 가능
$ git rebase -i HEAD~3 : Head부터 3개를 스쿼시
vi 에디터에서 head가 맨 아래 나오는 것 확인 가능

insert모드로 바꿔서 squash 할 부분의 pick을 지우고 s로 변경
:wq로 빠져나옴

로그를 확인하고

나머지 로그는 지우고 상단에 커밋 메세지를 작성함

log로 커밋이 합쳐진 것 확인 가능
