2016-08-01 3 views
0

내가 뭘 하려는지 :git 히스토리를 정리하는 방법 특정 커밋을 푸시 한 후 제거 하시겠습니까?

나는 기능을 완료했다.

git add -A; git commit -m "feature A complete" 

그런데 나는 몇 가지를 놓친 것을 깨달았습니다.

git add -A; git commit -m "feature A missed something 1" 
git add -A; git commit -m "feature A missed something 2" 
git add -A; git commit -m "feature A missed something 3" 

지금 내 역사는 다음과 같습니다

111AAA2 feature A complete 

feature A complete 커밋에 missed something 병합 커밋 모두 함께 :

A238ad1 feature A missed something 3 
3238adX feature A missed something 2 
1238ad7 feature A missed something 1 
111AAA2 feature A complete 

나는 그것을 같이하고 싶다.

나는 올바른 방법으로 git rebase -i HEAD~4을 알고 있지만, 실제로 역사를 정리하기 위해 나쁜 커밋을 제거하지는 않습니다.

다른 기사에서 알 수 있듯이 git commit --fixup 명령과 git rebase -i --autosquash이 있지만 제대로 작동하지 않습니다. 나는 이것이 매우 쉽다라고 확신한다, 나는 오늘 그것에서 단지있다. HEAD~5 마지막 나타내는 경우이 경우

+0

대화 형 리베이스 중에 이러한 커밋을 수행 할 작업을 지정하지 않았기 때문에 아무 것도 제거하지 않는 이유는 아마도 것입니다. 'squash'를 기본으로하는'pick'을 변경해야합니다. 이렇게하면 스쿼시가 서로의 위를 커밋하고 결국 커밋을 편집 할 수있는 기회가 주어집니다. –

답변

1

는 5

을 저지른 이것은 당신이

git rebase -i HEAD~5 

을 포함 할 헤드의 수에 따라

git rebase -i 

사용하여 시작할 수 있습니다 대화 형 REBASE

를 사용

그런 다음 추가로 o를 사용할 수 있습니다. 커밋을 스쿼시하여 메시지를 편집합니다. 그냥 대신 pick 옵션의 그래서 여기 당신이 볼

squash

squash 대신

쓰기, 나는 squash에 대한 바로 가기입니다 s에 대한 옵션 pick을 변경합니다. 이 파일을 저장하고 닫으면 대화 형 리베이스가 시작되고 스쿼시에 대해 표시된 커밋은 21b4e04 Fixed missing bad practice으로 스쿼시됩니다. 스쿼시 후 새로운 커밋 메시지를 입력하라는 메시지가 표시됩니다. 새 메시지를 입력하고 enter을 누르면 완료되었습니다.

+0

흠. 방금 테스트 레포를 만들고 테스트 해 보았지만 작동했지만 다른 레포에서는 작동하지 않습니다. 이것은 내 다른 repo에서 작동하지 않더라도 정답 인 것 같습니다. :/성가신. –

+0

얼마나 이상한가, 그것은 오류 메시지 또는 출력을 전혀 제공합니까? –

+0

기본적으로 나는 그것을 이미 밀어 넣었 기 때문에 그것을 생각한다. 이제는 다른 사람들이 저를 저촉했기 때문에 커밋의 범위를 커밋하는 방법을 알아 내려고합니다. 즉'git rebase -i origin/master ~ 5 origin/master ~ 2'라고합니다. 이것이 가능한가? –

관련 문제