2016-09-02 7 views
1

커밋을 "스쿼시"해야합니다. 일반적으로 나는 이런 식으로 뭔가를 사용하고 있습니다 :젠장, 스쿼시 rebase를 강제하는 법

git rebase -i HEAD~10

을하지만, 지금은 아래의 오류를 얻고있다 : 당신은 내가 모든 충돌을 해결 git 척을 볼 수 있듯이

error: could not apply 2009972... fixes

When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".

. 자, 을 원하지 않으므로 충돌을 해결할 수 없습니다.

내가 필요한 것은 git과 같은 것을 알려주는 방법입니다. "이봐, 난 아무것도 병합하고 싶지 않아. 그냥이 지점에있는 모든 추적 된 파일을 가져 가라. - 마지막 커밋/HEAD에 나타나면 버리고 제거하라. 예를 들어,

이 모두의 목록입니다 해시 위탁 가정 : 마지막으로 최신의, 그리고 전에 이전 10 커밋은 "새 커밋으로이 파일을"적용 "

1-2-3-4-5-6-7-8-9-10-11-12, HEAD 포인트 (12)에을

나는이 작업이 모두 2에서 커밋이라고 불리는 모든 것을 스쿼시하거나 제거하려고합니다. git log 후 최종 결과가 제공되도록 -11 포함 : 전과 수술 후 파일이 같은해야합니다

1-12

.

내가 필요한 것을 얻기위한 명령은 무엇입니까?

답변

2

(현재 REBASE을 중단 한 후) 가장 간단한 해결 방법은 다음과 같습니다

$ git reset --soft HEAD~10 

지금, 당신의 HEAD 10 다시 커밋 이동하지만 어느 파일이 변경 : 그들은 모두 새로운 변화로 표시됩니다 저 지르다.

그런 다음 정상적으로 커밋하십시오.


이 접근법의 단점은 새로운 커밋 메시지를 작성할 때 중간 커밋 메시지에 액세스 할 수 없다는 것입니다.

$ git rebase -i -s theirs HEAD~10 

그것은 흥미로운 일이 될 것입니다 당신이 먼저 충돌을 얻는 것을 처리 한 방법을 알고 :

대안은 갈등 해결 전략 그들의를 지정하여 원래 rebase -i 명령 작업을하는 것입니다 하지만 보통 rebase -i을 보통 적용해야합니다. 그 10 가지 커밋들 중 일부가 자체적으로 병합되지 않는다면?

+0

덕분에, 저는 - 소프트에 대해 잊어 버렸지 만, 제 2의 해결책에 관심이 있습니다. 당신이 그들의 행동이 정확히 무엇인지, 그리고 "당신을 위해 일하는 것"이 ​​무엇인지 설명 할 수 있습니까? – Martin

+0

예 해당 커밋 중 일부는 자체적으로 병합됩니다 – Martin

+0

전략에 대한 설명은 병합 및 리베이스 문서를 참조하십시오. rebase -i는 패치를 하나씩 순서대로 재생하며'-s theirs'는 충돌이 있음을 의미합니다. 새로운 state_를 취하십시오 (즉, 커밋 리베이스가 현재 재생 중입니다). – Useless