2012-04-07 5 views
29

В принципе, у меня есть запрос на открытый pull, который я хочу исправить, и в то же время я хочу сделать 1 фиксацию, которая содержит 2 функции в 2 отдельных фиксации.Как переместить новую (переписанную) историю в удаленный репозиторий

Github репозиторий теперь выглядит следующим образом, где затруднительное новая отрасль:

master c-c-c 
      \ 
    fix c-c-c-c 

Я создал запрос тянуть из затруднительного.

Я хотел изменить последнее коммят в исправлении в 2 фиксаций в моем локальном хранилище следующим образом:

master c-c-c 
      \ 
    fix c-c-c-n-n 

где п-п мои 2 новых фиксации.

Чтобы добраться до этой точки локально, я сделал это:

1. git rebase -i HEAD~2 
2. Changed my last commit line to "edit", saved and closed the file 
3. git reset HEAD^ 
4. git stash save 
5. Removed the changes I don't want in the first commit 
6. git commit -m "commit a" -a 
7. git stash apply 
8. git commit -m "commit b" 

Так что теперь у меня есть 2 совершает так, как я хочу. Проблема в том, что я обнаружил ошибку, которая попала в запрос pull. Поскольку я уже нажал на удаленный репозиторий, он не примет мои новые коммиты (поскольку исходный текст отсутствует).

Я бегу:

git push origin fix --dry-run 

и я получаю сообщение:

To [email protected]:<UserName>/<Repository>.git 
! [rejected]  fix -> fix (non-fast-forward) 
error: failed to push some refs to '[email protected]:<UserName>/<Repository>.git' 

Я видел другие сообщения предлагают тянуть мои изменения от происхождения, прежде чем отодвигая еще раз, но не то, что в основном сбросить мои 2 комманды обратно в один?

В идеале, мне бы хотелось назначить один и тот же идентификатор фиксации последнему фиксации, чтобы он мог заменить текущий. Есть ли способ сделать это? (Обратите внимание, что я не бежал git reset с --hard)

ответ

60

Столкнувшись с этой проблемой, сила толчок работает для меня:

git push --force origin fix 
+1

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

+0

Итак, чтобы уточнить: правильно ли, если владелец проекта уже слился в запрос на растяжение, после чего я делаю «git push -force fix fix», тогда «git fetch» ​​с конца проекта будет тянуть исправить? – PonyEars

+4

Владелец проекта должен выполнить сброс, если изменения уже были вытащены, поскольку фиксация все еще будет существовать в его ветке. 'git fetch origin', затем' git reset --hard origin/master'. См. Http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head – NightOwl888