2013-09-21 2 views
3

나는 지저분한 자식 나무를 가지고 있고 그것을 고치는 가장 좋은 방법이 궁금했다.나는 뽑기 대신에 합쳐진 방법을 고쳤다.

* 3f599ff - (HEAD, origin/enterprise-options, enterprise-options) Merge branch 
|\ 
| * 5087bec - (upstream/master) Remote Change (2 days ago) 
| * 6705b5f - Remote Change (2 days ago) 
* | 880c0a6 - New Feature (3 hours ago) 
|/ 
* 312968b - Blah (4 weeks ago) 

새 기능 880c0a6을 적용하기 전에 변경 사항을 적용해야했지만 그렇지 않았습니다. 나는 upstream/master 5087bec을 병합하기로 결정했다. 병합 커밋 3f599ff를 되돌리고 변경 사항을 가져온 다음 다시 시작하는 방법은 무엇입니까?

또는이 트리가 그대로 적합한가요? 나는 오픈 소스 프로젝트에 기여하고 있는데 이것은 내 요청이 현재 어떻게 생겼는지이다.

답변

2

원격 저장소로 푸시하지 않은 경우 병합을 실행 취소하고 변경 사항을 가져올 수 있습니다.

git reset --hard 880c0a6 
git pull --rebase 

리모컨을 제거하고 마지막 로컬 커밋으로 리포를 재설정합니다. 그런 다음 --rebase 옵션을 사용하여 변경 사항을 가져와 선형 히스토리를 가질 수 있습니다. 변경 사항이 원격 저장소로 푸시되지 않은 경우에만 이렇게하십시오. 당신은 역사를 바꾸고 있으며 이것은 나쁜 습관입니다. git push -f을해야하고 리모컨을 사용하는 다른 사용자는 리모컨에서 업데이트 할 때 문제가 있습니다.

그렇지 않으면 병합 커밋은 일반적으로 무해합니다.

+0

로컬 브랜치 일 뿐이며, 실제로 'git pull --rebase'는 전체 문제를 해결할 수 있습니다. '재설정'할 필요가 없습니다. –