既にローカルでgit管理しているものをgithubにpushする

想定している状況

  • とりあえず、ローカルで開発をしていた
  • もちろん、git initして、作業毎にgit commitをしている
  • ブランチは切ってなくて、masterブランチで作業している
  • 一通り実装したので、githubに公開しようと思った
  • githubリポジトリを作ったけど、どうやってpushしていいかわからん
  • githubリポジトリを作った時の、LICENSEやらREADME.mdは残しておきたい*1

手順

github上でSSHのclone URLをコピーしてきます。
例:git@github.com:noboru-i/irkit.git

git管理しているディレクトリにて、下記のコマンドを実行します。

git remote add origin git@github.com:noboru-i/irkit.git
git fetch

これにより、origin/masterとして、github上のmasterブランチを参照できるようになりました。

なので、origin/masterを、ローカルのmasterにリベースします。*2(masterブランチをチェックアウトしている前提)

git rebase origin/master

これで、ローカルのmasterブランチはLICENSEやらREADME.mdが存在している状態になります。

なので、これをpushします。

git push origin master

f:id:suzaku114:20140505154842p:plain

一本道になりました。
一番左のコミットがgithubで自動的にコミットされたもので、それ以降のものがローカルでコミットしていたものです。
時系列はひっくり返ってしまいますが、意味的にはこんな感じでいいんじゃないでしょうか?

ちなみに、mergeしたらこんな感じに、入り口2つになったので、なんか微妙だなーと。

f:id:suzaku114:20140505154025p:plain

もっといいやり方があるような気はします。

余談

マージしてpushしちゃったあとの復旧方法は下記の通りです。

git reset --hard c62d6a3
git co -b o_master
git reset --hard e14b7566ca35c5910dd0769d3bdadb59f1499231
git push -f origin o_master:master
git co master
git b -d o_master
  • c62d6a3:1個前(margeする前)のコミット
  • e14b7566ca35c5910dd0769d3bdadb59f1499231:githubの初期コミット

なにをやっているかというと、下記のような感じ。

  • masterのマージコミットを破棄
  • o_masterブランチにて、元のorigin/master を再現し、強制push
  • masterをチェックアウトしなおし、不要になったo_masterブランチを削除

開発効率をUPする Git逆引き入門

開発効率をUPする Git逆引き入門

  • 作者: 松下雅和,船ヶ山慶,平木聡,土橋林太郎,三上丈晴
  • 出版社/メーカー: シーアンドアール研究所
  • 発売日: 2014/04/09
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (4件) を見る

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

*1:別に、LICENSEやらを破棄していいのなら、force pushしちゃえばいいと思う

*2:日本語あってるかな?