2010-10-19 4 views
9

Je travaille actuellement sur un projet et j'utilise des machines dans deux endroits différents pour le faire. J'ai créé une branche pour la fonctionnalité sur laquelle je travaille et quand j'ai fini de travailler dessus, je modifie mon commit pour cette branche et je la pousse sur le serveur pour que je puisse reprendre là où je l'avais laissé sur mon autre machine. Lorsque j'essaie d'envoyer mon commit modifié, il rejette mon push. Je suppose que c'est parce que je pousse un commit qui est destiné à clobber le HEAD actuel de la branche de fonctionnalité. Je n'utilise généralement que --force.Git: pushing modified commits

Y a-t-il une meilleure façon de procéder?

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

Répondre

17

Il est impossible d'écraser une branche distante sans --force dans ce cas. Vous avez 2 options:

  • continuer à utiliser git push --force
  • ne pas utiliser --amend. Si un travail que vous avez fait mérite un commit séparé (est assez stable, compile, passe plus de tests, etc ...), créez un nouveau commit. Sinon, créez une branche temporaire (quelque chose comme my-feature-unstable si votre branche est my-feature) et validez là. Quand il redevient stable, vous pouvez faire git reset --soft my-feature, checkout my-feature et commit pour créer un seul commit dans votre branche à partir de plusieurs validations inachevées. Après cela, la branche temporaire peut être supprimée.
+6

Je qualifierais l'option «ne pas utiliser modifier»: ne l'utilisez pas sur un travail publié. Sur un travail non publié (branches locales/personnelles), vous devez absolument l'utiliser. (Et si vous avez plus d'un repo personnel, cela signifie que vous utiliserez 'push --force' pour transférer votre travail quelquefois.) – Cascabel

+0

Merci beaucoup pour ça! Maintenant, je peux garder mon code en sécurité et les logs de validation sont propres. –

Questions connexes