본문 바로가기
💻 하나씩 차곡차곡/Back-end

[깃/깃허브(git/github)] 커밋(Commit) & 푸시(Push) 하기 / 기본적인 충돌 상황 해결하기 (IntelliJ GUI.ver + 터미널 CLI.ver)

by 뚜루리 2025. 4. 30.
728x90
320x100
깃, 깃허브를 활용하여 커밋 & 푸시 하는 법 그리고 기본적인 충돌상황에서 해결하는 법 정리하기

 


 

📌  (선행) 프로젝트 소스 최신 상태로 만들기

일반적으로 Git 커밋(Commit) & 푸시(Push) 를 하기 전엔 GUI, CLI 상관 없이 무조건 프로젝트를 최신 상태로 만들어 줘야 함. 안그럼 충돌이 남.

 

💻 IntelliJ GUI 버전

 

💻 터미널 버전

git pull origin main

 

 


 

📌 일반적인 Git 커밋(Commit) & 푸시(Push) 방법

 

💻 IntelliJ GUI 버전

1. 소스를 수정함

 

2. 인텔리제이 좌측에 [Commit] 아이콘을 클릭해주고, 커밋 & 푸시할 소스를 선택한 후

아래에 반드시 커밋 메시지를 작성한 후 하단에[ Commit and Push] 버튼을 클릭해줌

※ 여기에 보여진다고 이 소스들이 git add가 된게 아님. 스테이징에 올라온 게 아님. 걍 수정된 사항만 보여지는것임.

 

3. 팝업이 하나 뜨는데 내가 커밋 & 푸시할 소스가 맞는지 한 번 더 확인 후, 하단에 [Push]버튼을 클릭해주면 커밋 & 푸시 끝!

 

4. 깃 로그 화면을 확인하면 내가 방금 커밋 & 푸시한 커밋 로그가 생김!

 

💻 터미널 버전

# 모든 변경 사항 스테이징
git add .

# 커밋
git commit -m "커밋 메시지"

# 푸시
git push origin 브랜치명
# 예: git push origin main

 


📌 Git 커밋(Commit) & 푸시(Push) 충돌이 발생했을 때 (누군가 먼저 push한 경우)

엄밀히 따지면 다른 사람이 a소스를 수정하고 푸시함 그리고 내가 b 소스를 수정하고 푸시했을 때 생기는 충돌임.
즉, 각자 수정하는 코드가 겹치지 않을 때 해당됨. 

💻 IntelliJ GUI 버전

 

1. 커밋 & 푸시 하려고 하면 위와 같은 경고창이 뜸

(원격 저장소의 변경 사항을 먼저 반영하지 않으면 push할 수 없다는 뜻)

CANCEL : 아무 작업도 하지 않음

REBASE : 원격 변경사항을 먼저 가져오고 내 커밋을 위에 덧붙임커밋 로그 깔끔함

MERGE : 원격 변경사항과 내 커밋을 자동으로 병합함 불필요한 merge 커밋 생김

 

✅ REBASE를 누른다면?

다른 사람이 먼저 푸시한 코드(깃 테스트2)를 먼저 반영하고, 그다음에 내 코드(깃 테스트3)를 반영함. 커밋로그 일직선으로 깔끔하게 됨.

 

MERGE를 누른다면?

다른 사람이 먼저 푸시한 코드(깃 테스트2)를 먼저 반영하고, 그다음에 내 코드(깃 테스트3)를 반영되긴 하지만 커밋로그 지저분해짐.

 

 

💻 터미널 버전

 REBASE 방법

1. 변경된 소스를 커밋 푸시하려고하면 위와 같은 에러가 뜸.

 

git pull --rebase origin main

2. 위의 명령어를 원격 변경사항을 먼저 가져오고 내 커밋을 위에 덧붙임 = REBASE 기능.

 

git push origin main

3. 그 다음에 다시 푸시하면 해결 완료.

 

4. 깔끔하게 커밋로그 생성됨

 

 

 


📌 Git 커밋(Commit) & 푸시(Push) 충돌이 발생했을 때 (누군가 먼저 push한 경우)

똑같이 충돌이 나지만 위와 다른 케이스인게 같은 소스를 수정했을 때 충돌 해결 방법임 .

💻 IntelliJ GUI 버전

 

여기까진 똑같음

 REBASE를 누른다면?

위와 같은 메시지가 뜬다.

ACCEPT YOURS : 내 변경사항(로컬)을 그대로 적용함 → 원격 변경은 무시됨

ACCEPT THEIRS : 원격 변경사항만 반영하고 내 로컬 변경은 버림

MERGE : 3-way 병합 도구를 열어 직접 줄별로 수정

 

MERGE 선택하면

복잡해보이는 창이 뜨는데 

왼쪽이 내가 수정한 것 / 가운데가 그래서 최종으로 반영할 것 / 오른쪽이 원격 저장소에 저장된 것임.

소스 확인해서 가운데 화면에 최종 소스를 만들어 준담에 아래 [APPLY] 눌러주면 됨.

 

아직 충돌이 해결 안된거 같은데 걍 해결했따고해? 라고 묻는 창

확인해서 화면상으로는 충돌이 해결 안된것처럼 보여도 소스상으로 문제 없다면

APPLY CHANGES AND MARK RESOLVED를 클릭하면

병합완료. 

 

근데 여기서 끝이 아니라 강제 푸시를 한번 더 해줘야 함.

다른 소스가 충돌난 것과 다르게 같은 소스로 충돌나서 병합한 후에는 강제 푸시가 필요함!

 

 

728x90
320x100