이번 포스트에서는 git을 사용하면서 초보자들이 가장 많이 하는 실수들을 정리하고 안정적으로 사용하는 방법에 대해 알아보자.
자주 만나는 오류 상황 1
먼저 manager는 master branch에서 commit을 진행하고 remote에 push 한다.
public class Test {
// Test reset by member a
// manager master 추가
}
이 상황에서 만약 member a도 master branch에서 commit을 진행한다.
package gittest;
public class Test {
// Test reset by member a
// member a master 추가
}
만약 여기서 member a가 push를 진행하면 어떻게 될까? 주의해서 볼 내용은 먼저 push를 진행한 manager에 의해 remote가 가지고 있는 master의 id는 '3aedc8d'인데 member a가 가지는 id는 'a9a0da3'-> 'e2a8d22'이다.
이 상태에서 push를 진행하면 아래와 같은 오류가 발생하면서 push는 실패한다.
이것은 member a가 가지고 있던 이전 master의 버전에 remote에 있는 master commit 버전이 없기 때문에 발생하는 문제이다.
해결책 1
이 작업이 성공하기 위해서는 먼저 pull 작업을 진행해서 remote의 내용을 가져와서 버전을 맞춘 후 push를 진행해야 한다.
pull을 진행하면 동일한 코드를 manager와 member a가 수정했으므로 conflict가 발생한다. 이를 수정 후 commit 하자.
history를 살펴보면 remote의 마지막 commit인 '3aedc8d'가 포함되어있고 member a의 작업에 의한 commit 하나, 충돌 해결에 의한 commit 하나 총 두 개의 commit이 생긴 것을 확인할 수 있다.
remote에 반영할 commit이 두 개가 쌓였기 때문에 프로젝트에는 ↑2의 표시로 push할 commit이 두 개 있음을 보여준다. 다시 push를 진행하면 문제가 해결된 것을 확인할 수 있다.
자주 만나는 오류 상황 2
다시 manager가 Test 코드를 수정 후 아직 commit 하지 않은 상황에서 pull을 진행해보자. 이번에는 아래와 같이 Checkout conflict 상황이 발생한다.
해결책 2
위 상황을 처리하기 위해서는 먼저 commit을 실행 후 pull을 진행해야한다.
안정적인 작업을 위한 습관
git을 쓰면서는 특별히 branch를 조작하지 않는다면 아래 절차만 잊지 않으면 95%는 오류 없이 사용할 수 있다.