빈 커밋을 푸시 할 수없는 이유는 무엇입니까?


35
  git commit --amend --allow-empty

그때

  git push origin master

자식은 말했다

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'remoteurl'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

왜? 이 문제를 해결하는 방법?

git 

답변:


56

문제는 커밋을 푸시한다는 것이 아닙니다 .
이는 추진 관한 다른 이미 푸시 커밋보다 커밋 (SHA1과 다른 하나).
그것은 git commit --amend마지막 커밋을 수정하고 새로운 커밋을 생성하지 않습니다.

즉, 다른 사람이 이미 복제 한 기록 과 다른 기록을 추진하고 있음을 의미합니다 .
이것이 문제가되지 않을 것이라고 확신한다면, 강제로 푸시해야합니다 :

git push -f origin master

당신이 한 것 :

git commit --allow-empty

새로운 (빈) 커밋 을 만들었을 것입니다.이 커밋은 아무 문제없이 밀어 넣을 수 있습니다.


5

Github에서 풀 요청을 생성하려는 경우. 당신은 할 수 있습니다 :

git commit --allow-empty -m "make pull request"

그런 다음 변경없이 끌어 오기 요청을 작성하십시오.


3

평판이 충분하지 않기 때문에 허용 된 답변을 명확히하려면 다음과 같이하십시오.

사용할 때

git commit --amend

그것은 않는 새로운 커밋을 만들 수 있습니다. 그러나 현재 커밋에 추가하지 않고 현재 커밋의 부모에 추가합니다. 시각적으로 포크처럼 보입니다.

  O (old commit)
 /
O-O (amended commit)

힘내는 이것을 원격에서 발산으로 해석합니다. 그래서 강제로 밀어 넣지 않아도됩니다.


0

푸시하려는 원격 지점이 현재 체크 아웃되지 않았는지 확인하십시오. 내 서버 중 하나에 git 저장소를 한 번 만들었고 왜 그것을 밀어 넣을 수 없었는지 알 수 없었습니다. 하루 정도의 문제 해결 후 서버 리포지토리에서 체크 아웃하는 동안 리포지토리 (또는 내가 원하는 지점)로 푸시 할 수 없다는 것을 알았습니다. 따라서 서버에서 변경을 완료하면 체크 아웃하는 새로운 지점을 만든 다음 서버로 푸시 할 수 있습니다. 이것은 귀하의 문제가 아닐 수도 있지만 서버의 빈 자식으로 문제가 발생했을 때 이와 비슷한 오류가 발생했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.