Gitをそろそろ使えるようにならないとまずいので

 そのうちそのうち、と言い続けてやらずにいたgitをやったのと、忘れないようにその使い方。ハードディスクが不調だったため、もしこのままデータが消えたらどうなるだろう、と考えて恐怖のあまりガクブルした後、バックアップしなくきゃいけない衝動に駆られ開始。
 やった内容は基本的なリポジトリーの作成とpushまで。
 作業はGit Bashで、pushするソースはAndroidで行った。GUI使えば楽だろうなーと思いつつbashでやる物好きだったり。

  • まず、GitHubでアカウントを作りリポジトリを作成。今回は鍵の登録などがめんどいのでsshでやらずhttpsでやった。pushするため必要なURLをコピーしておく。
  • originという名前でリモート先を登録しておく。
$ git remote add origin https://github.com/username/repository.git
  • ローカルでaddしてコミットする。
$ git add ./
$ git commit -m "first commit"
  • で、masterにpushする。
$ git push origin master
Username for 'https://github.com':
Password for 'https://username@github.com':

httpsでやっているので毎回ユーザ名を聞かれる、多分sshにすれば聞かれない。(git config で設定してやれば)

  • ここで問題発生、どうやらGitHubでリポジトリーを作った時に置かれているデフォルトのファイルと整合性をとれないのでpushできないようだ。
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/username/repository.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

git pushがrejectされたときの解決の手順 http://d.hatena.ne.jp/snaka72/20100602/1275496817
上記のサイトで同じ問題の解決法があったので同様に実行。
内容は、別ブランチを作成してmasterとマージしたのちpushする。

  • 別ブランチの作成。
$ git branch test
  • 作成したブランチに移行する。
$ git checkout test
Switched to branch 'test'

この後、元のファイルがなくなっていることに気づいて焦り、ブランチを戻したときgitはローカルで管理されているものだと初めて気づいた。あと、checkoutって移行じゃなくて出てく的な意味だよな、と小一時間悩んだ。今いるブランチから出るという意味っぽい。

$ git pull origin +master:test
  • なんか差分とった。
$ git diff test master

多分、違いが表示される。今回はファイルが追加されただけなので、特段気にする必要はない。たぶん。

  • マスターのブランチに戻ってマージする。
$ git checkout master
Switched to branch 'master'
$ git merge test

多分ファイルの変更箇所を自分で修正するよう示される。今回はファイルが追加されただけなので、修正は必要ない。たぶん。あと、実はこの時、eclipseが勝手にファイルが変更されたため編集中のファイルを保存し直していたせいでエラーが起きたのでaddしてcommitしてからcheckoutしてる。

  • そのまま、再びaddしてコミットしてpushする
$ git add ./
$ git commit -m "second commit"
$ git push origin master
  • 以上、終了。


 やる前はGitの概要は知っている程度で、わからないことだらけだったが、やってみると意外と単純に感じてしまった。ローカルにリポジトリーがあるのを知らなかったのが大きい。手元のリポジトリーにaddしてコミットして、そののちリモートにpushするだけ。
 あと、はてなでソースコードをきれいに表示させる方法がうまくいかずに悩んでたり。設定からはてな記法に変更したらできた。ちなみに今回はshを使ったけどこれでいいんだろうか。

参考サイト