2017-03-16 1 views
0

저는 집에서나 직장에서 프로젝트를 진행하고 있으며, 특정 일에 직장에서 저의 커밋을 푸는 것을 잊었고 집에서 개발을 계속했습니다. 오늘은이 같은 트리 결국 : 나는 그들이 충돌이없는 때문에, 직선 나무를하고 싶습니다 그러나모두 재 작성하지 않고 git 트리를 병합하십시오.

enter image description here

. 그것은 내가 누 르기를 잊었던 바로 그 문제였습니다. 이 문제를 어떻게 해결할 수 있습니까?

나는 13 일째까지 git reset --hard을 할 수 있지만 13 일 후에 작성한 코드는 모두 다시 써야한다는 것을 알고 있습니다. 모든 것을 다시 쓸 필요없이 git 트리를 고칠 수 있습니까?

+0

'git reset --hard'를 실행하기 전에 마지막 파란색 커밋시 새 분기를 만들 수 있습니다. –

답변

2

한 가지 해결책은 병합 전에 마지막 파란색 커밋에서 분기를 만드는 것입니다. 그런 다음 마스터를 재설정하고 리베이스 수 :

$ git branch work <sha1 for last blue commit> 
$ git checkout master 
$ git reset --hard <sha1 for black commit on the 14th> 
$ git checkout work 
$ git rebase master 
$ git checkout master 
$ git merge work 
$ git push -f origin master 

경고 :을 다른 사람이 이미 변경 사항을 뽑아하고 그 위에 짓는 경우, 그들에게 많은 두통의 원인이됩니다 리베이스. 위의 명령을 수행하기 전에 모든 동료에게이 가능성에 대해 경고해야합니다. 마음에,이 프로젝트에 참여하는 모든 동료 그냥 GitHub의에서 REPO를 가져 오는 올바른에 master를 재설정하여 로컬 REPO를 업데이트 할 수와

커밋 :

$ git fetch origin 
$ git checkout master 
$ git reset --hard origin/master 

(참고 작업 기계 가정용 컴퓨터는 "직장 동료"와 같습니다. 위의 내용은 가정용 컴퓨터를 업데이트하는 작업입니다.)

+0

rebase 란 무엇입니까? (작업 브랜치에?) –

+0

@RodrigoSouza 나는 당신에게 구글 "git rebase"를 제안한다. 간단히 말해서, (리셋 된)'master' 브랜치 맨 위의'work' 브랜치에서 커밋을 이동시켜 선형 커밋 히스토리를 생성합니다. –

+0

좋다. 이미 github에 공개 된 이래로, github에서 당길 때 집에서도 똑같이해야할까요? –

관련 문제