tools & libs/git

Eclipse에서의 Git 활용 - 7: 자주 발생하는 문제

  • -

자주 만나는 오류와 해결책

이번 포스트에서는 git을 사용하면서 초보자들이 가장 많이 하는 실수들을 정리하고 안정적으로 사용하는 방법에 대해 알아보자.

자주 만나는 오류 상황 1

먼저 managermaster branch에서 commit을 진행하고 remote에 push 한다.

public class Test {
    // Test reset by member a
    // manager master 추가
}

이 상황에서 만약 member amaster 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%는 오류 없이 사용할 수 있다.

  1. 아침에 출근하면 pull 해서 간밤의 변경 내용을 적용한다.
  2. 작업 내용을 단계별로 commit 한다.
  3. remote에 반영하기 전에 다른 사람의 작업 내용이 있을 수 있으니 pull 한다.
  4. 충돌이 없는지 확인하고 code를 push 한다.
  5. 2~4의 작업을 반복한다.

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.