[git] 이전 커밋으로 돌아가서 작업하기

Seunghyun Moon·2023년 5월 2일
0

git

목록 보기
2/4

git을 사용하다보면 remote repo에 push까지 하고 나서 (local에서도 마찬가지) 이전 버전으로 돌아가서 수정해야하는 상황이 있습니다. 이런 상황에 쓸 수 있는 방법 중 두 가지와 origin/{branch} 와 머지하는 방법을 공유합니다.


현재 상태

git log 로 본 현재 상태입니다.
현재 HEAD가 있는 부분에 문제가 있어 a14e commit 으로 돌아가서 작업을 하고 싶은 경우입니다.


git revert

https://www.atlassian.com/git/tutorials/undoing-changes/git-revert

git revert {commit hash} 를 사용하면 원하는 commit의 변경내용을 commit을 하며 되돌립니다.

그림으로 표현하면 아래와 같습니다.

https://niceman.tistory.com/187

git revert 6fbd


revert 결과

이전에 commit한 내용을 revert(되돌려서)해서 commit이 된걸 볼 수 있습니다.

git log에서 더 자세하게 볼 수 있습니다.

파일을 확인해보면 commit 이전 상태로 돌아간 걸 볼 수 있습니다.

이제 필요한 수정을 하고 remote 에 push 해보겠습니다.

같은 브랜치(main)에서 작업중이었기 때문에 head만 2개 앞서가있는걸 볼 수 있고 바로 push 가능합니다.

remote에도 반영이 잘 된걸 볼 수 있습니다.


git checkout

https://www.atlassian.com/git/tutorials/using-branches/git-merge

checkout을 통해 다른 branch로 옮겨가고 변경 사항을 수정한 이후에 3-way merge를 해보겠습니다.

그림으로 표현하면 아래와 같습니다.

https://www.w3docs.com/learn-git/git-merge.html

git log를 보고 runnging 브랜치에서 분기점으로 다른 브랜치를 생성할 commit sha 를 얻어옵니다.

git checkout 을 통해 브랜치를 생성합니다.

HEAD가 새로운 브랜치를 가리키는걸 볼 수 있고, 이전 커밋 상태를 가지고 있는걸 볼 수 있습니다.(파일 등)

더 알아보기 쉬운 브랜치 이름을 사용합니다.

변경사항을 반영하고 commit합니다.

--amend 파라미터는 실수로 commit했을 때 덮어쓰기 한다고 생각하면 됩니다.

main 브랜치로 돌아가서 머지합니다.

git merge {branch_name} 명령어를 사용해 머지하면 실패하는 경우가 있습니다. 이런 경우는, 단순히 파일의 추가,삭제가 아닌 두개의 브랜치가 모두 가지고 있는 파일인데 내용이 다른 경우입니다.
이 경우 unmerged 파일들의 diff 를 제공하기때문에 개발자는 충돌하는 부분을 직접 수정해줘야합니다.

충돌이 난 .gitignore 파일과 terraform.tfvars의 내용을 보면 바뀐 부분을 표시해준다.

vs code에서는 편리한 ui를 제공하기 때문에 accpet incoming change 버튼을 누르고 저장해 conflict를 해결한다.

add 하고 status를 살펴본다.

git status 를 보니 2 commits나 앞서 있다고 한다.

git log 를 본다.

addfwrules branch는 더이상 필요 없으므로 삭제한다.(삭제하지 않으면 origin/addfwrules라는 이름을 가지고 remote repo에 같이 push 된다.)

-D 옵션을 주면 -force 옵션이 같이 사용된다.

remote repo에 잘 push 된 걸 볼 수 있다.

profile
I live fullest

0개의 댓글