2010-10-19 31 views
9

Tôi hiện đang làm việc trên một dự án và sử dụng máy ở hai vị trí khác nhau để thực hiện. Tôi đã tạo một chi nhánh cho tính năng mà tôi đang làm việc và khi tôi hoàn thành một số công việc, tôi sửa đổi cam kết của mình với nhánh đó và đẩy nó vào máy chủ để tôi có thể tiếp tục từ nơi tôi đã dừng lại trên máy khác của mình.Git: đẩy các cam kết đã sửa đổi

Khi tôi cố gắng gửi cam kết đã sửa đổi của mình, nó từ chối sự thúc đẩy của tôi. Tôi cho rằng điều này là bởi vì tôi đang thúc đẩy một cam kết được dùng để che dấu HEAD hiện tại của nhánh tính năng. Tôi thường chỉ sử dụng --force.

Có cách nào tốt hơn để thực hiện việc này không?

[email protected]:~/projects/myproject$ git pull origin topx 
From heroku.com:myproject 
* branch   topx  -> FETCH_HEAD 
Already up-to-date. 
[email protected]:~/projects/myproject$ git add app/models/reward.rb 
[email protected]:~/projects/myproject$ git commit --amend 
[topx 82a9880] Added topX reward 
9 files changed, 106 insertions(+), 21 deletions(-) 
rewrite app/views/ceo/_reward_criteria.html.erb (96%) 
create mode 100644 public/javascripts/jquery.multiselect.min.js 
create mode 100644 public/site/javascripts/jquery.multiselect.min.js 
create mode 100644 public/stylesheets/jquery.multiselect.css 
[email protected]:~/projects/myproject$ git push origin topx 
To [email protected]:myproject.git 
! [rejected]  topx -> topx (non-fast-forward) 
error: failed to push some refs to '[email protected]:myproject.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes before pushing again. See the 'Note about 
fast-forwards' section of 'git push --help' for details. 

Trả lời

17

Không có cách nào để ghi đè nhánh từ xa mà không cần - trong trường hợp này. Bạn có 2 lựa chọn:

  • tiếp tục sử dụng git push --force
  • không sử dụng --amend. Nếu một số công việc bạn đã thực hiện xứng đáng với một cam kết riêng biệt (đủ ổn định, biên dịch, vượt qua các thử nghiệm khác, v.v ...), hãy tạo cam kết mới. Nếu không, hãy tạo chi nhánh tạm thời (chẳng hạn như my-feature-unstable nếu chi nhánh của bạn là my-feature) và cam kết tại đó. Khi nó trở nên ổn định trở lại, bạn có thể làm git reset --soft my-feature, checkout my-featurecommit để tạo cam kết đơn lẻ trong chi nhánh của bạn từ một số cam kết chưa hoàn thành. Sau đó, nhánh tạm thời có thể bị xóa.
+6

Tôi đủ điều kiện tùy chọn "không sử dụng sửa đổi": không sử dụng tùy chọn này trên công việc đã xuất bản. Trên công việc chưa được xuất bản (các nhánh địa phương/cá nhân), bạn hoàn toàn nên sử dụng nó. (Và nếu bạn có nhiều hơn một repo cá nhân, điều đó có nghĩa là bạn sẽ sử dụng 'push - force' để chuyển công việc của bạn xung quanh đôi khi. Đó là tốt.) – Cascabel

+0

Cảm ơn rất nhiều cho điều đó! Bây giờ tôi có thể giữ mã của tôi an toàn và các bản ghi cam kết sạch sẽ. –

Các vấn đề liên quan