Tại sao tôi không thể đẩy một cam kết trống?


35
  git commit --amend --allow-empty

sau đó

  git push origin master

Git nói rằng

! [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.

Tại sao? Làm thế nào để khắc phục điều này?

git 

Câu trả lời:


56

Vấn đề không phải là bạn đang đẩy một cam kết trống .
Đó là về việc đẩy một cam kết khác (một cam kết với SHA1 khác) so với một cam kết đã được đẩy.
Đó là những gì git commit --amendnó làm: nó đã sửa đổi cam kết cuối cùng, nó không tạo ra một cam kết mới.

Điều đó có nghĩa là bạn đang đẩy một lịch sử khác với lịch sử khác có thể đã được nhân bản.
Nếu bạn chắc chắn rằng đó sẽ không phải là vấn đề, bạn cần phải đẩy mạnh:

git push -f origin master

Bạn nên làm:

git commit --allow-empty

Bạn có thể đã tạo ra một mới (trống) cam kết, mà bạn có thể đã đẩy mà không cần bất kỳ vấn đề.


5

Nếu bạn muốn tạo yêu cầu kéo trên Github. Bạn có thể:

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

Sau đó tạo yêu cầu kéo mà không thay đổi.


3

Để làm rõ câu trả lời được chấp nhận, vì tôi không đủ uy tín để bình luận:

Khi bạn sử dụng

git commit --amend

không tạo ra một mới cam kết. Tuy nhiên, nó không nối nó với cam kết hiện tại, nó sẽ nối nó với cha mẹ của cam kết hiện tại. Nhìn trực quan, nó sẽ trông giống như một ngã ba.

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

Git diễn giải điều này như một sự khác biệt từ xa. Đó là lý do tại sao nó sẽ không cho phép bạn đẩy nó mà không ép buộc.


0

Đảm bảo rằng chi nhánh từ xa mà bạn đang cố gắng đẩy đến hiện không được kiểm tra. Tôi đã tạo một kho lưu trữ git trên một trong các máy chủ của mình một lần và không thể hiểu tại sao tôi không thể đẩy nó. Sau một ngày khắc phục sự cố, tôi phát hiện ra rằng tôi không thể đẩy vào kho lưu trữ (hoặc chi nhánh tôi muốn) trong khi nó đã được kiểm tra trên kho lưu trữ của máy chủ. Vì vậy, tôi chỉ cần tạo một chi nhánh mới mà tôi kiểm tra khi tôi thực hiện thay đổi trên máy chủ và sau đó tôi có thể đẩy đến máy chủ. Đây có thể không phải là vấn đề của bạn, nhưng tôi đã gặp một lỗi tương tự như vậy khi tôi gặp sự cố khi đẩy một git trống trên máy chủ của mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.