2010-10-19 27 views
9

Actualmente estoy trabajando en un proyecto y usando máquinas en dos lugares diferentes para hacerlo. He creado una rama para la función en la que estoy trabajando y cuando termino el trabajo en ella, modifico mi compromiso con esa rama y la envío al servidor para que pueda reanudar donde lo dejé en mi otra máquina.Git: presionando confirmaciones modificadas

Cuando intento enviar mi confirmación modificada rechaza mi inserción. Supongo que esto se debe a que estoy empujando hacia arriba una confirmación que tiene como objetivo aplastar la CABEZA actual de la rama de características. Normalmente solo uso --force.

¿Hay una mejor manera de hacerlo?

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

Respuesta

17

No hay forma de sobrescribir la bifurcación remota sin --force en este caso. Tienes 2 opciones:

  • seguir utilizando git push --force
  • no utilizan --amend. Si algún trabajo que ha realizado merece una confirmación por separado (es lo suficientemente estable, compilando, pasando más pruebas, etc.), cree una nueva confirmación. De lo contrario, cree una bifurcación temporal (algo así como my-feature-unstable si su bifurcación es my-feature) y realice la confirmación allí. Cuando se vuelva a estabilizar, puede hacer git reset --soft my-feature, checkout my-feature y commit para crear una confirmación única en su rama a partir de varias confirmaciones sin terminar. Después de eso, la rama temporal se puede eliminar.
+6

Calificaré la opción "no utilizar enmiendas": no la use en trabajos publicados. En el trabajo no publicado (sucursales locales/personales), debe usarlo absolutamente. (Y si tiene más de un repositorio personal, eso significa que usará 'push --force' para transferir su trabajo a veces. Está bien.) – Cascabel

+0

¡Muchas gracias por eso! Ahora puedo mantener mi código a salvo y los registros de confirmación limpios. –

Cuestiones relacionadas