관리 메뉴

bright jazz music

blog15 : Git 자주 쓰는 명령어 예제 2 본문

Projects/blog

blog15 : Git 자주 쓰는 명령어 예제 2

bright jazz music 2023. 1. 30. 08:18

11.  git merge --no-ff --log

: fast forward를 사용하지 않고 merge log를 포함해서 현재 사용중인 main 브랜치에 mybranch를 머지하기.

git merge --no-ff --log mybranch 입력하면

아래와 같이 vi로 들어간다. 커밋 메시지를 확인하고 q 또는 wq를 입력하여 나온다.

머지 커밋 생성

 

머지 커밋이 보인다.

 

이를 소스트리와 같은 툴에서 확인하면 차이를 확인할 수 있다. 이전 포스팅의 9번 항목에서 merge했을 때에는 브랜치의 분기가 보이지 않았다. 그러나 이번의 경우는 브랜치가 분기 됐다가 다시 합쳐지는 모습을 확인할 수 있다.

 

그런 다음 git push해서 원격 리포지토리로 커밋 사항을 push한다.

메인 브랜치에 mybranch 커밋사항이 merge된다.

 

 

12. 충돌이 발생 경우 1

현재 이와 같은 상태라고 가정.

1. testbranch라는 브랜치를 만들었다.

2. 소스 코드에 변경사항을 발생시켰다.(PostController.java)

3. git status

4. git add . (변경사항 스테이지에 전부 올림.)

5. 작업사항 커밋.

 

(만약 어떤 (여기서는 testbranch)에서 변경사항을 만들고 커밋하지 않은 채 다른 브랜치(여기서는 main)로 checkout한려 한다면 아래와 같은 에러가 발생한다. 

$ git checkout main
error: Your local changes to the following files would be overwritten by checkout:
        src/main/java/com/endofma/blog/controller/PostController.java
Please commit your changes or stash them before you switch branches.
Aborting

이럴 때는 커밋을 하거나 git stash를 사용하여 임시저장할 수 있다. 난 권고를 지키지 않았을 때의 결과를 보고 싶어 git checkout -f main을 사용하여 강제로 main 브랜치로 이동했다. 그러자 나의 변경사항이 삭제되었다.

 

 

 

그런데 누군가 메인브랜치에서 변경사항을 만들고 push를 해버렸다.

이렇게 되면 문제가 생긴다. 내가 분기하여 작업한 시점이 최신이 아니게 되기 때문이다.

내가 분기하고 나서 누군가 메인에 작업을 했다면, 그 이후에 머지 했을 시에 문제가 발생할 수 있다.

 

main 브랜치에 testbranch를 merge하려 했으나 충돌이 발생했다.
소스 내용도 바뀌었다.

 

<<<<<<< HEAD
	//메인의 최신상태
        System.out.println("누군가 main에 작업하고 push 1");
=======
	//내가 작업하던 내용
        System.out.println("test for test branch1");
>>>>>>> testbranch	//내 작업의 위치

둘 중에 사용할 것을 선택하면 된다. 

내 경우에는 내가 작업하던 것을 살렸다.
두 개 전부 스테이지에 올려 놓고 커밋한다. git commit을 입력하면 아래의 vim창이 열린다. :wq해서 저장하고 나오면 커밋 메시지가 생성된다.
머지 커밋 생성

머지 되었다.

 

그런데 이 경우 커밋이 깔끔하지 않다.

 

 

충돌 발생 경우 2 : git rebase 사용하기

다른 방법을 실습하기 위해 커밋을 되돌린다.

메인 커밋이 최신일 것을 볼 수 있다.
소스도 main 작업으로 바뀐 것을 볼 수 있다.
main브랜치는 최신상태이다.

이럴 때 testbranch에서 git rebase main을 사용하면 메인의 최신 커밋을 내 분기 밑으로 오도록 만들어 준다.

오류 발생( 양쪽 모두 수정된 부분이 존재하기 떄문에)

 

 

내걸로 선택

 

git add . 또는 해당 파일을 선택해서 스테이지에 올린 뒤,

다시 git rebase --continue

명령어 입력 직후에는 vim으로 커밋창이 뜬다. :wq 해서 나온다.

 

이후에 main 브랜치로 checkout해서 머지한다.

vim 머지 커밋 창

이렇게 하면 처음에 사용한 방법과 다르게 분기가 하나만 생기는 깔끔한 커밋처리를 볼 수 있다.

Comments