git commit을 할 때 amend 옵션이 있습니다. 이 옵션은 무엇을 하는 것일까요?
제 test 브랜치에는 modify 1.txt 2 ... 어쩌고의 commit message가 있는 커밋이 하나 있습니다. 해시는 39b1a2a8입니다. "1.txt" 라는 파일만 변경되었는데요.
4, 5가 추가되었습니다. 아차. 그런데 제가 6을 추가하는 것을 깜빡했나 보군요. 1.txt의 맨 끝에 6을 추가합니다. 그리고 Amend 옵션을 붙여서 커밋해 보겠습니다.
Amend는 현재 branch의 lastest commit을 변경합니다. 덮어 씌운다고 보면 되겠습니다. Amend를 체크하고 커밋을 해 보겠습니다. 이것을 LAST'라고 하겠습니다.
커밋 메세지를 다시 수정하고, Amend commit을 눌러보겠습니다.
이제 다시 커밋 로그를 볼까요? 그러면, a2d2462e라는 커밋이 있음을 알 수 있는데요. 커밋의 해시 값이 39b1a2a8이였는데, a2d2 어쩌고로 바뀌었습니다.
1.txt의 변경 내역을 보면, 4, 5, 6이 추가되었음을 볼 수 있어요. 어떻게 되었는가? 도식화 해서 그려봅시다.
기존에 1.txt에 4, 5를 append 하는 커밋이 test의 lastest 커밋이였습니다.
그런데, lastest 커밋에서 빠트린 내용이 있어서 "1.txt"에 6을 append를 하고 amend를 시켰습니다. 그러면, 6을 append 한 것까지 덮어 씌워져 버립니다. lastest commit이 4, 5를 뒤에 append 하는 것이였고, 추가로 6을 append 한 것이였기 때문입니다.
그런데, 커밋 메세지가 마음에 들지 않는다고 제가 커밋 메세지까지 수정해서 다시 amend를 시켜 버렸습니다.
그러면 last'가 다시 last''으로 대체됩니다. 아예 다른 커밋이 되어 버립니다. hash값이 바뀐 것만 봐도 알 수 있습니다. 그런데, 원격 테스트 브랜치에서는 lastest commit이 대체되기 전 last였습니다. 바로 push 해 버리면 충돌이 날 수 밖에 없습니다. 이제, 다른 개발자가 test 브랜치의 1.txt에, 3과 4 사이에 8을 추가했다고 해 봅시다.
다른 개발자가 8이라는 기능을 추가한 경우, 무작정 force push하면 위험할 겁니다. 어떻게 해야 할까요? 저는 1.txt에 6, 7, 8이 append 된 것도 같이 반영시키고 싶습니다. test branch를 pull 해 보겠습니다.
충돌이 났다고 뜨네요. 왜냐하면, 제 test 브랜치에도 1.txt에 추가적인 수정사항이 있었고, 원격에도 1.txt에 대해 추가 수정사항이 있었기 때문입니다.
하아. 이런 상황은 꽤 자주 벌어집니다. 일단 <<<< HEAD는 제 로컬에서의 변경 사항입니다. 일단 뒤에 5, 6, 7은 들고 갑니다. 다음에 3과 4 사이에 8이 와야 하므로 merge를 하려면 1 2 3 8 4 5 6 7 이렇게 되어야 할 겁니다.
1.txt를 이렇게 바꾼 다음에, git add 명령어를 이용해서 1.txt가 modified 되었다는 정보를 추가해 주겠습니다.
요래 입력한 다음에 intellij나 pycharm 같은 ide에서 commit & push를 하겠습니다.
remote test1 branch에 잘 들어갔음을 볼 수 있습니다.
'GIT' 카테고리의 다른 글
git stash apply vs git stash pop 에 대해 알아봅시다. (1) | 2022.10.04 |
---|---|
git stash 명령어에 대해 간단하게 알아봅시다. (0) | 2022.10.03 |
git global gitignore 를 하는 방법을 알아봅시다. (0) | 2022.08.16 |
깃허브 readme 파일에 상대경로로 이미지를 올려봅시다. (2) | 2021.09.06 |
intellij로 실습하면서 git fetch vs pull 의 차이점을 알아봅시다. (0) | 2021.09.03 |
최근댓글