프로젝트 작업을 git을 통해 계속해오다 어디서 뭐가 어긋났는지 되돌리기 버거운 일들이 발생했다.
이를 위해 그동안 수행한 커밋 중에서 기능들이 원활히 돌아가던 커밋을 찾아 코드를 되돌리고,
이 코드를 바탕으로 다시 개발을 진행한 뒤 이를 최근 커밋으로 리모트 저장소에 올리고자 하였다.
서치를 좀 해보니까 commit을 직접적으로 최신 commit으로 바로 올려버리는 건 쉽지 않고,
이전 커밋으로 되돌아간 뒤 이를 최신 master와 merge해 최신화하는 방법을 통해
이전 커밋을 바탕으로 한 프로젝트 코드를 최신으로 한 새 commit을 push 할 수 있었다.
1. git reset --hard 커밋코드
이 명령어를 통해 현재 수행하고 있는 프로젝트 전체를 커밋코드에 해당하는 프로젝트 내용으로 되돌린다.
안드로이드 스튜디오를 이용하면서 확인한 바로는 저장 및 불러오기 등등 번거로운 절차없이 부드럽게
프로젝트가 오픈 된 채로 유동적으로 코드들과 자료들이 바뀌어나가는 걸 볼 수 있었다. (매우 신기함)
2. 프로젝트 수정
3. git add .
4. git commit -m "메시지"
5. git push origin master
이때 master 포인터가 되돌아간 커밋코드에 위치하고 있기 때문에 지금의 push는 리모트의 최신 commit에 영향을 주지 않는다.
그리고 내가 브랜치를 따로 만들어주지 않았기 때문에 소속 없는 붕 뜬 commit으로 git에서 존재하게 된다.
(브랜치를 만들어주기 이전엔 리모트 저장소에서 확인할 수 없었음)
아래 스크린샷에서 5번 명령을 수행 후 그냥 git checkout master로 도망가봤더니
git에서 친절하게 붕 뜬 두개의 commit을 알려주고 있는 것을 볼 수 있다.
아래의 두 commit은 git reset --hard를 통해 되돌아간 프로젝트 코드 바탕하에 새로 작성하여 push한
커밋들이다.
6. git branch 만들브랜치이름 커밋코드
이 명령어를 가지고 붕 뜬 커밋중 가장 최근의 커밋코드를 집어넣으면 이 새로 뻗어나온 두 개의 커밋으로
새 브랜치를 생성할 수 있다.
7. git merge 새로만든브랜치이름
아까 도망쳐나오면서 내 master 포인터는 현재 리모트 저장소에 최신으로 올라가있는 commit으로 옮겨져 있고,
이 상태에서 새로 생성한 브랜치를 merge 할 수 있다.
이후 git status를 해보면 modified 된 파일들 중 충돌 없는 것들은 푸른색으로 되어 merge 될 것임을 보여주고
양측 브랜치에서 함께 modifed해 충돌이 일어난 파일을 붉은 색으로 표시해주고 있는 걸 확인할 수 있다.
여기서 안드로이드 스튜디오를 확인해보면 충돌이 일어난 파일을 내비게이션에서 붉은색으로 표시해주는데
들어가서 확인하고 충돌부분을 해결해 주면 된다.
8. git add .
9. git commit -m "커밋 메시지"
10. git push origin master
10번째 명령어를 마지막으로 merging이 완료된 것을 리모트 저장소에서도 직접 확인해 볼 수 있게 된다.
보면 내가 이전 commit에서 작업해 새로 push한 commit들이 뻗어나와 있고, 이를 최신 commit과 merge 한것까지
확인해 볼 수 있다.
앞으로도 종종 일어날 일들이라 생각이 되어 익숙해져야 할 git 사용법이라 생각이 든다..
그리고 익숙하던 안 익숙하던 간에 git이 정말 개발하는데는 편하고 편한 도구라는 것은 굉장히 분명하다.
참고 :
https://git-scm.com/book/ko/v2/Git-도구-고급-Merge
https://git-scm.com/book/ko/v2/Git-도구-Reset-명확히-알고-가기
http://www.devpools.kr/2017/02/05/초보용-git-되돌리기-reset-revert/
'VC & DEV TOOLS > Git' 카테고리의 다른 글
[GIT] 새 컴퓨터에서 GIT을 사용할 때 Github을 쓰던 기존 유저임을 증명하기 (0) | 2019.10.13 |
---|---|
[GIT] 비공개 repository와 터미널로 clone하기 (0) | 2019.10.04 |
[GIT] 이전 commit으로 돌아가 리모트 저장소에 최신 commit으로 올리기 (0) | 2018.06.19 |
[GIT] GIT 사용중 프로젝트에 불필요한 파일을 제외하기 (0) | 2018.05.30 |
[GIT] 생성한 git repository에 프로젝트를 업로드하자 (0) | 2018.01.08 |