2012-01-20 4 views
52

프로젝트 작업을 시작했으며 원래 마스터로 푸시 한 원하지 않는 커밋을 만들었습니다. 이제 풀 요청을하려고 할 때 Github은 이전 커밋을 모두 커밋하려고합니다.힘내 당김 요청에서 원하지 않는 커밋을 제거하십시오.

내 질문은 원하지 않는 커밋을 제거하고 커밋 할 변경 사항을 커밋하여 마스터와 최신 상태를 유지하는 방법입니다.

+0

"git rebase"를 찾으십시오. 당신은 커밋을 함께 스쿼시 할 수 있고 커밋을 남겨 둘 수 있습니다. –

답변

34

당신이 원하는 프로젝트의 포크를 풀 요청이라고 생각하십니까?

헤드를 재설정하여 기록을 변경하게되므로 --force 플래그를 사용해야합니다. git log을 사용하여 최종 커밋의 해시를 찾습니다.

는 이제 샤에 머리를 변경하고 마지막 좋은 커밋 이후 파일의 변경 내용을 유지합니다

git reset SHA 

을 실행 색인도 재설정됩니다.

이제 코드를 변경하고 원하는 커밋을 수행 할 수 있습니다. 그러나 저장소의 기록을 변경 한 이후 git push --force을 수행해야합니다. 즉, 저장소를 분기 한 사용자는 더 이상 변경 사항을 가져올 수 없습니다. 그러나 당신은 업스트림으로 끌어 오기 요청을 할 수 있습니다.

+0

누군가 내 끌어 오기 요청을 기반으로하는 분기를 포크하는 경우에만 강제로 문제가 발생합니까? 아니면 그들이 내 저장소에서 전혀 포크를합니까? 그들이 문제가되는 지점을 삭제하면 저장소와 다시 동기화 할 수 있습니까? 강제로 푸시하지 않고 끌어 오기 요청에서 커밋을 완전히 제거 할 수 있습니까? – endolith

+1

@endolith 분기에서 커밋을 기반으로하는 경우에만. 나중에 리베이스 된 커밋의 하위 클래스 인 커밋은 영향을 받아 원래 커밋이 더 이상 존재하지 않을 때 쉽게 병합 할 수 없습니다. 아무도 당신의 풀 요청을 병합하거나 기반을 짓지 않는 한, 당신의 힘으로 당신의 풀 요청을 당신의 지점으로 강제 밀어줌으로써 당신의 풀 요청을 바꿀 때까지 그렇게하기를 원합니다. 그것은 당신이 당신의 적극적인 요구에 적극적으로 그것을 변화 시킨다는 것을 분명히한다면 일어날 수 없습니다. –

+0

브랜치 변경을 위해 pull 요청이 열려 있어야합니다. –

0

git gui를 사용하는 경우, git gui로 이동하여 분기 기록을 시각화하십시오. (다음 단계를 수행하기 전에 푸시 할 로컬 변경 사항을 백업하십시오.) 분기를 마스터로 재설정하려는 지점을 마우스 오른쪽 단추로 클릭하고 재설정을 클릭하십시오. 재설정 한 후 명령 행에 git push -f 을 입력하십시오. 이제 분기에서 필요한 변경을 수행하고 n을 다시 누른다. 지금 당기기 요청을 생성하면 분기 재설정 후 새 커밋 만 있습니다.

관련 문제