반응형

과거 svn을 사용할때, 소스가 꼬였거나 잘 못된 개발로 되돌아가야할 일이 생길 경우 리비전을 통해 되돌아가고 재작업을 진행하고 그랬는데, git에서는 리비전이라는 용어대신 특정 commit으로 되돌아 가는 방식을 사용해야 했습니다.

 

 

이러한 형태로 git작업이 되어있다고 칩시다...

너무 복잡한 예시는 오히려 이해하는데 방해가 될 것 같아서 최대한 간단하게 해보려고 합니다.

index.js추가 ~ cal메소드 추가부분을 봐주시면 됩니다.

 

fork를 사용 중이라면 되돌아가고자 하는 commit부분에 오른쪽 클릭 후 checkout commit 을 해주면 간단하게 되돌아갑니다.

역시 gui가 한 눈에 잘보이고 편합니다...

이 후 브랜치를 새로 생성하고 소스를 수정한다음 merge까지 진행하면 새롭게 변경할 수 있습니다.

fork사용자는 이렇게 편하지만 git bash를 쓰고 있는분들을 위해 명령어와 함께 설명을 추가해보겠습니다.

 

git bash에서 과거 commit으로 회귀하기

git log

git log

commit된 히스토리들을 봐야 되돌아가고 할텐데 이때 사용하는 명령어는 "git log"입니다.

-p옵션을 사용하면 어떤부분이 바뀌면서 올라갔는지 나오고 추가적으로 -2 와 같은 명령어를 입력하면 최근 2개만 출력해서 보여줍니다.

 

git log -p -2

git log

 

명령어를 입력해보면 노란글씨의 commit 부분이 보일텐데 앞 6자리를 기준으로 확인해주면 알아서 식별을 해줍니다.

git에 등록한 각각 commit의 고유번호들로 이 값을 통해 돌아갈 수 있습니다.

되돌아갈땐 브랜치를 바꿀 때 사용하였던 checkout 명령어를 사용합니다.

 

과거 commit으로 돌아가기

git checkout <commit번호>

"git checkout 0cd1df"를 입력해보겠습니다.

과거 commit으로 이동

 

 

되돌아오기

그럼 다시 원래대로 돌아올수도 있어야겠죠?

마지막 commit된 곳으로 해도되지만 마지막 브랜치인 master로 이동하겠습니다.

 

git checkout master

master로 되돌아오기

 

과거로 commit후 새롭게 브랜치 생성하기

cal()메소드가 존재하지 않던 과거로 돌아가고 거기서 브랜치를 만들어서 master를 진행해보겠습니다.

방금 전 과거 commit으로 돌아갔으니 거기서 소스 수정하고 다시 commit하면 되는게 아닐까 생각하시겠지만 그부분에서 commit을하고 push를 해도 브랜치를 만들어서 진행한게 아니기때문에 적용이 되질 않습니다.

 

 

git log

//돌아갈 commit 고유값 앞 6자리를 기억합니다.

git checkout 4385268

git log를 통해 commit 고유값을 알아낸 후 다시 과거로 돌아갑니다.

이제 브랜치를 새로 생성해줍니다.

 

 

git branch new_psw

과거로 돌아간 후 new_psw브랜치 생성

되돌아가서 브랜치까지 생성을 성공하셨다면 checkout을 통해 꼭 브랜치를 변경하시고 수정할 소스를 바꾸신 후 다시 commit을 처리해줍니다.

이제 브랜치가 생겼기때문에 commit을해도 정상적으로 처리가 됩니다.

 

 

new_psw브랜치로 새로운 소스 올리기

git checkout new_psw //새로 생성한 브랜치로 바꾼다.

git add . //변경된 소스를 올린다.

git commit -m "min메소드 추가" //commit처리

git push origin new_psw //서버에 new_psw브랜치로 올리기

새로운 브랜치를 따서 작업을 완료했으니 변경된 브랜치로 checkout을 하시고 변경된 소스를 올린 후

commit을 해줍니다.

new_psw브랜치에서 소스 올리기

 

push를 통해 서버까지 올리면 이제 master브랜치로 병합처리를 해보겠습니다.

 

 

master브랜치 병합하기

git checkout master

master브랜치로 변경합니다.

 

 

git merge new_psw

master브랜치로 바꿔놓은상태에서 new_psw브랜치를 병합합니다.

master브랜치로 병합하기 충돌발생!

merge failed라는 말과 할께 충돌이 났다는 메시지가 나옵니다.

충돌난 소스를 수정하겠습니다.

 

 

git 충돌!

충돌이 났고 필요없는 cal메소드는 삭제하였습니다.

 

충돌난 부분 수정

 

이제 완벽하게 merge를 끝내기 위해 다시 소스를 올립니다.

 

 

git add .

git commit -m "merge 완료"

git push origin master

merge를 위해 commit을 진행합니다.

 

 

 

정상적으로 merge까지 끝났다.

생각보다 복잡하다면 복잡하지만 branch과정을 한번 해보셨다면 그렇게 어렵지 않을겁니다.

이부분이 어려우신분은 branch부터 간단하게 예제를 한번 해보시면 쉽게 이해가 가능할 것 같습니다.

 

 

fork에서 확인하니 더 잘보입니다.

 

여기서 한단계 더 나아가면 더이상 사용하지 않는 new_psw브랜치까지 삭제해주시면 좋을 것 같습니다.

 

반응형