Git: подталкивание исправленных коммитов - PullRequest
9 голосов
/ 19 октября 2010

В настоящее время я работаю над проектом и использую машины в двух разных местах. Я создал ветку для функции, над которой я работаю, и когда я закончу какую-то работу над ней, я изменю свой коммит на эту ветку и перенесу его на сервер, чтобы я мог выбрать, где остановился на другой машине.

Когда я пытаюсь отправить свой исправленный коммит, он отклоняет мой толчок. Я предполагаю, что это потому, что я нажимаю на коммит, предназначенный для того, чтобы заглушить текущий заголовок ветви функции. Я обычно просто использую --force.

Есть ли лучший способ сделать это?

mike@sleepycat:~/projects/myproject$ git pull origin topx
From heroku.com:myproject
 * branch            topx       -> FETCH_HEAD
Already up-to-date.
mike@sleepycat:~/projects/myproject$ git add app/models/reward.rb
mike@sleepycat:~/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
mike@sleepycat:~/projects/myproject$ git push origin topx
To git@heroku.com:myproject.git
 ! [rejected]        topx -> topx (non-fast-forward)
error: failed to push some refs to 'git@heroku.com: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.

1 Ответ

19 голосов
/ 19 октября 2010

В этом случае нет способа перезаписать удаленную ветку без --force.У вас есть 2 варианта:

  • продолжать использовать git push --force
  • не использовать --amend.Если некоторая работа, которую вы проделали, заслуживает отдельного коммита (достаточно стабильна, компилируется, проходит больше тестов и т. Д.), Создайте новый коммит.Если нет, создайте временную ветку (что-то вроде my-feature-unstable, если ваша ветка my-feature) и сделайте коммит там.Когда он снова станет стабильным, вы можете сделать git reset --soft my-feature, checkout my-feature и commit, чтобы создать в вашей ветви один коммит из нескольких незавершенных коммитов.После этого временная ветка может быть удалена.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...