< 현재 상태 >

"mater" branch에 test.txt 파일을 만든 후 커밋했다. "exp" branch를 만들어 "master"와 "exp" branch의 내용을 같게 만들었다.



< branch 간 파일이 같을 때 서로 다른을 수정했을 경우 병합(Merge) > - 충돌 안 남.


"exp" branch에서 test.txt 파일 뒷 부분에 내용을 추가하고 커밋했다.


"master" branch에서 test.txt 파일 앞 부분에 내용을 추가하고 커밋했다.

현재 "master" branch와 "exp" branch에서 test.txt 파일에 대해 수정한 부분이 서로 다르다.


"master" branch에서 "exp" branch를 merge 했다. 위 사진에서와 같이 병합이 성공적으로 이루어졌다. test.txt에 대해 수정한 부분이 다르기 때문에 "master" branch에서의 test.txt 파일 뒤에 "exp" branch에서 test.txt 파일에 대해 수정한 내용이 추가됬다.



< 현재 상태 >

다음 예제의 편의를 위해 "exp" branch에서 "master" branch를 merge 했다. 위 사진에서 merge 후에 "master" branch와 "exp" branch가 "Fast-forward" 방식으로 merge 된 것을 볼 수 있다. branch 간에 현 상태를 비교해보니 서로 같다.



< branch 간 파일이 같은데 서로 같은 부분을 수정했을 경우> - 충돌 남.

"exp" branch에서 test.txt 파일 안 "a" 함수 매개변수를 수정하고 커밋했다.


"master" branch에서 test.txt 파일 안 "a" 함수 매개변수를 수정하고 커밋했다.


현재 "master" branch와 "exp" branch에서 test.txt 파일에 대해 수정한 부분이 "a" 함수 매개변수로 같다.


"master" branch에서 "exp" branch를 merge 했는 데 "CONFLICT" 충돌이 났다. "git status"로 상태를 확인해보니 "Unmerged"라고 출력된다. 이렇게 branch 간에 같은 파일의 같은 부분을 수정할 시 충돌이 나고 merge가 되지 않는다.



< branch 간 파일이 같은데 서로 같은 부분을 수정했을 경우> - 충돌 해결법

충돌 후 "test.txt" 파일을 보면 위와 같이 보인다. HEAD는 현재 branch를 말하고 "======"구분자 사이로 충돌난 부분이 보인다. 위 사진을 보면 "HEAD" 즉 "master" branch는 충돌 부분이 "function a(master){"로 되어 있고 "exp" branch는 "function a{exp){"로 되어 있다. 이렇게 난 충돌 해결 방법은 충돌난 파일 "test.txt" 파일을 직접 수정 후 "git add '충돌 파일 이름'"을 해주면 충돌에 대한 처리 작업을 끝냈다는 것을 git에서 알려줄 수 있다. 다음 사진을 보면 알 수 있다.

충돌이 해결된 것을 볼 수 있다.


그 다음 git commit로 커밋 메시지를 보면 "Conflicts:"로 충돌 관련 내용이 적혀있다.


merge 한 버전이 커밋 잘 된 것을 확인할 수 있다.

'Git(생활코딩)' 카테고리의 다른 글

Git - branch 병합(fast-forward/Not fast-forward)  (0) 2017.06.14
Git 혁신(2) - branch 정보 확인  (0) 2017.06.13
Git 혁신(1) - branch  (0) 2017.06.12
Git 원리(2) - commit  (0) 2017.06.11
Git 원리(1) - git add  (0) 2017.06.09


종업원 클래스는 정상 작업 시간(workHours 속성)과 초과 작업 시간(overTimeHours 속성)을 기반으로 임금을 계산하는 기능(calculatePay 메서드)를 제공한다. 이 클래스 설계는 SRP와 OCP를 만족하는가?



위 종업원 클래스는 임금 계산이라는 단일 책임을 수행하지만 임금 계산 방법에 대해서 새로운 임금 계산 로직을 추가하면 calculatePay 메서드를 수정해야 한다. 따라서 SRP를 만족하나 OCP는 위반한다.


따라서 위의 종업원 클래스에 대해 OCP를 만족하려면 아래의 그림과 같아야 한다.


public int calculatePay(){
  return payManager.calcPay(this);
}

+ Recent posts