masterからpull request送ってしまったときの復旧方法1例

masterからpull request送ってしまったときの復旧方法メモ
spikeはtopic branchで行っていたものの、その前提としてdocumentの修正をしないと話し通じないなーと思って、masterでちょいちょいっと直して pull requestした。
そこまではよかったんだけど、pull request考え直したんだけど取り込まれちゃったとかそう言うのは置いといて、おれのrepositoryのmasterよごれちゃった、とおもってどうしようかあたふたしてた。

なんであたふたしてたかっていうと、”topic branch に変更したものを push すれば pull request に反映される” って読んだことあったから。
github で開発するなら pull request を使いましょうという話, zsh-users の設定を入れてみた。 – HsbtDiary(2011-10-17)
http://www.hsbt.org/diary/20111017.html

masterでpull request送っちゃったら、そのあとのmasterへのpushって…。とおもって、自分のremoteのmasterをrenameする方法とかupstreamの追従を切る方法とかいろいろググッてモヤモヤしてた。

最終的には、以下のように整えたい。
– forkした自分のリポジトリのmasterのupstreamは本家のmasterもしくはfeature-developmentのきれいなbranchにしたい。
– 自分のtopic-branchはそこから作成したい。
– 前送ったpull requestに(できれば)あんまり影響与えたくない

はじめ、自分のリポジトリのmasterにpushしたぶんをbranchに再pushしてから、remoteのmaster消して、upstreamからmasterつくり直そうとした。ら、消せません!

$ git push origin master:doc-bundle-exec
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:sanemat/sorcery.git
* [new branch] master -> doc-bundle-exec
$ git push origin :master
remote: error: refusing to delete the current branch: refs/heads/master
To git@github.com:sanemat/sorcery.git
! [remote rejected] master (deletion of the current branch prohibited)
error: failed to push some refs to ‘git@github.com:sanemat/sorcery.git’

default branch消そうとするとメンドイらしい。adminタブから操作しないとだって。それはめんどい。
Can’t remove remote branch in git – Super User
http://superuser.com/questions/294407/cant-remove-remote-branch-in-git

なので、別の手段をとる。
GitHubへpull requestする際のベストプラクティス – hnwの日記
http://d.hatena.ne.jp/hnw/20110528

自分のcommitぶん1個巻き戻して mergeしてpushしちゃえばいいんじゃない?っていう。push -f しないといけないのかなあ。pushしたものの歴史改変するといろいろまずいんじゃないかな。とかいろいろ考えたけどエラー出たら考えればいいってことで。
$ git remote add upstream https://github.com/NoamB/sorcery.git

$ git reset –hard HEAD^
HEAD is now at 7997cd8 Regenerate gemspec for version 0.7.7

$ git pull upstream master
remote: Counting objects: 99, done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 76 (delta 56), reused 42 (delta 22)
Unpacking objects: 100% (76/76), done.
From https://github.com/NoamB/sorcery
* branch master -> FETCH_HEAD
Updating 7997cd8..3eb80bb
Fast-forward
Gemfile.lock | 36 +++—
README.rdoc | 10 +-
Rakefile | 1 +
VERSION | 2 +-
lib/generators/sorcery/install_generator.rb | 6 +-
lib/sorcery/controller.rb | 1 +
sorcery.gemspec | 139 ++——————
spec/Gemfile.lock | 5 +-
spec/README.md | 16 +-
spec/rails3/Gemfile.lock | 5 +-
spec/rails3_mongo_mapper/Gemfile.lock | 5 +-
spec/rails3_mongoid/Gemfile.lock | 5 +-
…/spec/controller_activity_logging_spec.rb | 12 +-
13 files changed, 72 insertions(+), 171 deletions(-)

さくっとpullできた。さくっとpush通った。-fなしに。

$ git push origin master
Counting objects: 99, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (74/74), done.
Writing objects: 100% (76/76), 7.63 KiB, done.
Total 76 (delta 56), reused 0 (delta 0)
To git@github.com:sanemat/sorcery.git
3f1e176..3eb80bb master -> master

おわり。
きれいに取り込まれてたから
衝突せずに済んだから
pull requestがcloseされてたから
pull –rebaseしてればひとつ巻き戻す要らなかった?
なんか問題起きてるけど気づいてない

などなどいろいろ考えられるけど、今回は杞憂でしたっぽいってことで。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中