2011-09-12 11 views
0

로컬 레포에 커밋의 계층 구조가 있으며 이전 커밋으로 롤백하고 HEAD 커밋의 일부가 아닌 전체 커밋을 적용하고 싶습니다. 어떻게해야합니까?Git에서 다른 커밋에 수동 병합

다음 시나리오를 고려하십시오. 2
내가 커밋 다시 1

커밋 6 (HEAD)는
5
4
3
커밋 커밋 커밋 커밋

커밋 : 내 REPO에서 다음 커밋을 2 이하와 같이

git reset --hard commit2 

는 지금은, 예를 들어, 3 커밋 6 커밋 할 때까지하지만, 그없이 적용된 모든 변경 사항을 병합 할 내가이 할 경우 그 중 일부에 5

을 커밋 :

git merge commit6 

I을 결국 나는 선택의 여지가없이 머리 속에 모든 것을 가지고 끝날 것입니다.

어떻게하면 목표를 달성 할 수 있습니까?

건배 AF

+0

thanls 찾고있는 것입니다 저장을 선 3

을 커밋 삭제합니다. rebase를 시도하고 있지만 지금은 터미널에 갇혀있어! 나는 그것과 noop에 몇 가지 명령 옵션 텍스트가 터미널에서 텍스트 입력 모드에 충실! 나가고 싶지만 어떻게해야할지 모르겠다. 모든 것을 시도했지만 작동하지 않았습니다.게다가 나는 대화 형 편집기의 프롬프트를 얻지 못했다. – Abolfoooud

+0

ok 나는 나의 에디터가 실제로 (Mac에서) 터미널에 열려 있던 VIM이라는 것을 공개했다. 내가 그것을 혼란스럽게 여기는 이유는 익숙했다. 파일을 저장하고 현재 병합을 수행하는 과정에서 관리 할 수 ​​있습니다. – Abolfoooud

답변

2

을 'T는 유형, 당신의 머리에 2

를 저지하기 위해 다시 설정해야

git rebase -i HEAD~6 

대화 형 편집기가 프롬프트됩니다.

커밋이 어떻게 처리 될 수 있습니까? 예 : 이

다음 타겟 결과는 UR 답변에 대한

+0

ur 답장을 보내 주셔서 감사합니다. rebase를 시도하고 있지만 지금은 터미널에 갇혀있어! 나는 그것에있는 몇몇 명령 선택권 원본이있는 그것 및 thats에 원본 입력 모드에서 지팡이이다! 나가고 싶지만 어떻게해야할지 모르겠다. 모든 것을 시도했지만 작동하지 않았습니다. 게다가 나는 대화 형 편집기의 프롬프트를 얻지 못했다. – Abolfoooud

+0

나는 지금 거기에 가고있다. 커밋을 결합하고 삭제할 수 있습니다. 하지만 커밋에서 변경 한 내용을 어떻게 편집 할 수 있습니까? 대화 형 rebase 파일에서 "편집"을하면 메시지를 편집하는 상태가되지만 커밋은 변경되지 않습니다. 거기에서 어떻게 진행합니까? – Abolfoooud

+0

@Abolfoooud : 지금까지 내가 아는 한, 커밋을 삭제하고 다시 작성해야합니다. 원하는 커밋을 HEAD에 다시 정렬 할 수 있습니다. 그런 다음 ght를 다시 설정하십시오 - HEAD ^를 사용하여 변경 사항을 다시 작성하십시오. –

1

당신은 선택한 커밋에 새로운 지점을 만들 수 있습니다.

git checkout branch 
git checkout -b new_branch 

# remove unwanted commits 
git rebase -i HEAD~6 

# continue with merge 

은 또는 당신은 항상 벚꽃의 선택은 커밋 할 수 있습니다.

+0

아마도'git rebase -i commit1' 또는 비슷한 것을 의미 할 것입니다 .... –

+0

@Mark 당신은 정확합니다. –

3

cherrypick 중 하나를 선택할 수 있습니다.

아니면 자리에 (이미 변경 upstreamed 경우 수행해서는 안됩니다) 역사를 수정하려면 대화 형 REBASE를 사용하면

당신이 돈을 리베이스 사용할 수 있습니다이 경우

git rebase -i HEAD~6 
# in editor that popped up remove line that corresponds to Commit3, save and quit 
관련 문제