마지막 git 사용법입니다.
[TortoiseGit] git 사용법(2) - pull, branch, merge
HTML 삽입 미리보기할 수 없는 소스 실무에서, 또는 뭐... 부트캠프라든가 어딘가에서라도 교육을 받으면 팀별로 협업해서 프로젝트를 보통 하나 합니다. 저도 몇 번 했었고요. 그럴 때 git으로 팀
doringri.tistory.com
저번 포스팅에선 사람들과 함께 협업할 때 쓰이는 명령어들에 대해 다뤄 봤습니다.
다른 사람이 작업한 뒤 원격 저장소에 저장한 코드를 내 로컬에 업데이트시키는 pull이란 명령어가 있었죠.
하지만 pull을 하려는데, conflict(충돌)가 났다고 경고가 띄워지는 경우가 있습니다.
While merging, i.e. integrating changes of another (remote) branch into your local branch, a conflict in at least one file occured.
1. conflict가 나는 원인
간단한 예시를 들어보겠습니다.
다른 사람이 LoginController.java라는 파일의 19번째 라인을
System.out.println("로그인을 합니다.");
라고 수정했습니다.
하지만 내 로컬 파일의 LoginController.java의 19번째 라인은 이미 나에 의해
System.out.println("로그인을 시작하겠습니다.");
라고 수정되어 있어, 코드가 서로 충돌합니다. 그래서 git이 코드를 어떻게 합쳐야 될지 모르는 상황입니다.
즉, 코드를 어떻게 합칠지는 내가 직접 정해줘야 하죠.
@RestController
@RequiredArgsConstructor
public class LoginController {
final LoginService loginService;
@PostMapping("/login")
public ResponseEntity<Integer> login(LoginRequest loginRequest) {
return loginService.login(loginRequest);
}
}
지금 원격 저장소엔 이런 코드가 올라가 있습니다. 사용자 A와 B는 모두 이 코드를 clone으로 받은 상태입니다.
@RestController
@RequiredArgsConstructor
public class LoginController {
final LoginService loginService;
@PostMapping("/login")
public ResponseEntity<Integer> login(LoginRequest loginRequest) {
System.out.println("로그인을 합니다.");
return loginService.login(loginRequest);
}
}
그런데 A라는 사용자가 쓸데없이 저런 코드를 집어넣고 원격 저장소에 push를 했습니다.
@RestController
@RequiredArgsConstructor
public class LoginController {
final LoginService loginService;
@PostMapping("/login")
public ResponseEntity<Integer> login(LoginRequest loginRequest) {
System.out.println("로그인을 시작하겠습니다.");
return loginService.login(loginRequest);
}
}
B라는 사용자는 그 라인에 다른 문장을 넣어놓았습니다.
그러고 원격 저장소에 push하기 전 commit을 하고, push하기 전 pull 명령을 하였습니다.

충돌이 발생하였습니다.
확인을 클릭하고, 다른 창을 보면

이렇게 붉게 물들어있는 것을 보실 수 있습니다.
왼쪽의 Resolve를 클릭하면, 충돌이 난 코드를 수동으로 바꿔줄 수 있습니다.

그럼 이렇게, 어떤 파일이 문제인 건지 리스트로 보여줍니다. 지금은 파일 하나밖에 없으니 하나만 보여집니다.
파일을 더블클릭합니다.

그럼 3개의 코드가 나타납니다.
좌측 상단의 코드는 원격 저장소에 저장된 코드, 우측 상단의 코드는 내 로컬 파일의 코드입니다.
그리고 마지막으로 하단의 코드는 merge될 결과 코드입니다.
현재 git은 충돌이 난 19번째 라인을 어떤 코드로 채워넣어야 할지 궁금해하고 있군요.
merge될 결과 코드의 빨간 부분을 모두 없애주어야 정상적으로 pull 동작을 수행할 수 있습니다.
저는 우측 상단의 코드를 넣고 싶습니다. 그렇다면 우측 상단의 19번째 라인을 복사해서 하단의 19번째 라인에 붙여넣으면 됩니다.

19번째 라인의 붉은 색깔이 없어진 것을 볼 수 있습니다.
ctrl + s로 저장해 줍시다.

git은 충돌이 사라졌다고 말합니다. 위쪽 선택지를 클릭해 해결되었다는 것을 git에게 알려줍니다.

그럼 이렇게 충돌 목록이 비게 됩니다.
이렇게 충돌을 해결한 뒤에는, commit을 다시 한 번 해 주어야 합니다.

commit 창으로 들어간 뒤 확인을 클릭하고, commit을 눌러줍니다.

커밋 메시지를 수정하지 않았다면 정말 커밋 메시지를 저걸로 할거냐는 창이 뜹니다.
상관없다면 Ignore를 클릭하고 그렇지 않다면 Abort를 클릭한 뒤 커밋 메시지를 수정합니다.
그런 뒤엔 똑같습니다. push를 하면 됩니다.
여기까지 하면, 모든 과정이 끝이 납니다. 나의 로컬 파일과 원격 저장소는 완벽히 같은 상태로 연동됩니다.
git 포스팅이 끝났습니다. 모든 걸 이해하셨다면, 실전에서도 별 문제 없이 git을 사용하실 수 있을 겁니다.
git은 처음 하면 상당히 헷갈릴 수 있으니, 직접 한 번 해보시면 큰 도움이 될 것 같습니다.
진짜... 처음만 어렵습니다. 정말루요.
읽어주셔서 감사합니다.
'IT > git' 카테고리의 다른 글
| [TortoiseGit] Cherry Pick (0) | 2025.08.25 |
|---|---|
| [git] 프로젝트를 이미 존재하는 원격 레포지토리에 연결하기 (0) | 2023.09.10 |
| [git] 원격 브랜치 삭제하기 (0) | 2023.09.10 |
| [TortoiseGit] git 사용법(2) - pull, branch, merge (0) | 2023.06.24 |
| [TortoiseGit] git 사용법(1) - clone, commit, push (0) | 2023.06.19 |