2014-07-16 3 views
1

rebase/cherry-pick을 통해 마지막 커밋을 두 개 제거하려고합니다. git rebase HEAD^^^ -i을 호출 한 후에는 모든 커밋을 HEAD^^으로 남겨 두었으므로 HEAD^HEAD이 삭제됩니다.체리 추첨을 한 경우 변경 사항을 적용 할 수없는 이유

! [rejected]  dev -> dev (non-fast-forward) 
error: failed to push some refs to '[email protected]:XXXXXX/YYYYYYYYY.git' 
hint: Updates were rejected because the tip of your current branch is behind 
hint: its remote counterpart. Integrate the remote changes (e.g. 
hint: 'git pull ...') before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 

그러나 git pull 그냥 빨리 전달 호 전 HEAD 커밋 :

git push 후 나는 다음을 참조하십시오. 그래서, 나는 내가 시작한 것으로 끝을 맺고있다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

git 상태의 출력을 게시 할 수 있습니까? –

+0

죄송합니다, Lars. 더 이상 가능하지 않습니다. – igorp1024

답변

4

체리 피킹에 관한 것이 아니라 리베이스에 관한 것입니다. 리베이스 후에는 로컬 및 원격 브랜치가 분기되어 병합이 필요합니다. Git은 절대로 리모트에서 병합을 수행하지 않을 것입니다 (빨리 감기 병합이 아닌 한 브랜치 만 진행됨). 병합을 로컬에서 수행해야합니다.

사실, 병합은 원하는 것이 아닙니다. 명시 적으로 원격 브랜치에서 "분기 된"커밋을 삭제하고 로컬 브랜치의 상태로 덮어 쓰려고합니다.

git push -f으로 할 수 있지만이 분기를 다른 사람들과 공유하지 않는 경우에만해야합니다. 그렇지 않으면 변경 사항을 끌어내어 분기 된 사본으로 병합하고 제거하려는 커밋을 다시 도입합니다.

인 경우 분기를 체크 아웃 한 다른 사람들과이 저장소를 공유하는 경우 두 가지 옵션이 있습니다.

중 하나는 ...

  • 힘 푸시 어쨌든 다음 해당 지점에 협력 각 사람에게 연락하여 자신의 로컬 복사본을 폐기하도록 조언한다. 그들에게이 한 줄을 전송하고, 변경 사항을 숨기고 그들에게 조언을 자신이 갖고 있습니다

    $ git fetch && git checkout dev && git reset --hard origin/dev 
    

    을 이렇게 한 후, 그들의 지역 dev 분기에 커밋을 상실 할 수있다; 그들은 체리 피킹으로 그들을 복구 할 수 있습니다.

또는 ...

  • 는 당신이하려는 일을하지 마십시오. 공유 지사에서 기록을 다시 작성하면 안됩니다. 단지 다른 모든 사람에게 번거 로움을줍니다.
+1

그가 지사를 다른 사람들과 공유한다면 어떨까요? 그리고 뭐? –

+0

@tieTYT 업데이트 – meagar

+0

을 참조하십시오. 예를 들어 HEAD를 버린 경우^다른 사람들에게 로컬 복사본을 버릴 필요가 없습니다. – igorp1024

1

이것은 revert을위한 것입니다. 되돌리기 그래프에서 이전의 커밋을 유지하고 커밋을 새로 작성하여 기록을 다시 쓰지 않고 효과를 생성하는 커밋을 만들 수 있습니다.

또는 기록을 다시 쓰고 그 결과로 고생 할 수 있습니다.

+0

사실 나는 마지막 커밋이 오류가 발생하기 쉽기 때문에 추가 커밋을 피하려고했습니다. 하지만 공유 지사의 기록을 다시 쓰는 것은 나쁘다는 것을 알고 있습니다. 어쨌든 고마워. – igorp1024