2013-07-16 36 views
7

Tôi muốn xóa hai cam kết mới nhất với thông điệp cam kết "đầu tiên" và "giây". Trước tiên tôi kéo thạc sĩ sau đó tôi sử dụng lệnhmuốn bỏ nhiều cam kết trong github

git rebase -i HEAD~2 master 

Nó cho thấy tôi cả hai cam kết trong một trình soạn thảo như thế này:

pick first 
pick second 

Sau đó, tôi thay đổi trình soạn thảo này như:

pick first 
squash second 

Sau khi lưu những thay đổi tôi nhận được thông báo này:

Successfully rebased and updated refs/heads/master. 

Nó đã thay đổi bất cứ điều gì trong chủ từ xa. Để áp dụng những thay đổi này tôi sử dụng lệnh git push và đã nhận lỗi sau:

To https://github.com/aneelatest/GITtest.git 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to 'https://github.com/test/GITtest.git' 
hint: Updates were rejected because the tip of your current branch is behind 
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') 
hint: before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 

Sau đó, tôi lại chạy lệnh git pull và nó kết hợp tổng thể nguồn gốc và thực hiện một cam kết với điều này cam kết thông báo:

Merge branch 'master' of https://github.com/aneelatest/GITtest 

Sau khi tôi chạy lệnh git push, nó đè hai commit thành một với thông điệp "đầu tiên". Vấn đề là ở chủ từ xa, tôi có bây giờ Bốn cam kết:

first 
second 
Merge branch 'master' of https://github.com/test/GITtest 
first 

Nơi tôi muốn chỉ có một cam kết mà là đè bẹp một với cam kết thông báo "đầu tiên". Bất kỳ ý tưởng nào mà tôi đang làm sai?

+0

Bạn không phải bí bóng nữa: chủ sở hữu có thể làm điều đó cho bạn (kể từ tháng 3 năm 2016): xem http://stackoverflow.com/a/36377439/6309 – VonC

Trả lời

9

git rebase ghi lại lịch sử, bởi vì các cam kết đã được sửa đổi. Nó không phải là một vấn đề khi các cam kết nói trên đã không được đẩy đến một kho lưu trữ từ xa, nhưng ở đây điều khiển từ xa trước đây đã được đẩy với các cam kết mà bạn viết lại, vì vậy nó đã từ chối push.

Khi bạn kéo từ github, nó kết hợp cả hai lịch sử, và áp dụng cam kết bíp của bạn, do đó mớ hỗn độn.

Kết luận: khi bạn muốn viết lại các cam kết đó đã được đẩy, bạn có hai lựa chọn:

  • không làm điều đó
  • làm một git push --force, mà sẽ viết lại lịch sử cũng trên điều khiển từ xa, và nói với mọi người rằng bạn đã viết lại lịch sử, vì vậy họ sẽ thấy những điều kỳ lạ trong lần kéo tiếp theo của họ.
Các vấn đề liên quan