ラベル ** PC - Git / Github の投稿を表示しています。 すべての投稿を表示
ラベル ** PC - Git / Github の投稿を表示しています。 すべての投稿を表示

2014年8月7日木曜日

githubへ初めてpushする

 githubでリポジトリを作成すると、何をすべきかちゃんと表示してくれるので安心。
git remote add origin https://github.com/XXXXX/XXXXX.git
git push -u origin master

 一度-uを付けてpushすればpush先が記憶されるため次回以降は基本的にgit  pushのみでいける。

2014年8月6日水曜日

コミットしていないファイルを一時的に隠したい

 githubで複数人で作業していると、ローカルでコミットされていないファイルをとりあえず棚上げしてpullしたい時がある。
 その棚上げがstashでできるそうな。
git stash

 そうするとcommitしていないmodifiedファイルが一時的に消える。
 で、pushなりした後にpopを付けて再度実行すると戻ってくる。
git stash pop

 とりあえず今はこの二つのコマンドだけでなんとかなりそう。

参考:
変更を一時的に退避!キメろgit stash
6.3 Git のさまざまなツール - 作業を隠す

2014年7月24日木曜日

新しいブランチとしてpushする

 gitはとても便利らしいけど、複数人で使っていると怖い。よくわかっていない。

 とりあえずローカルで新しく作ったブランチをリモートの新しいブランチとしてpushすることがよくあるので、メモ。
git push -u origin [new branch]
 -uすると、push先が同じであればその後ブランチ名が省略できる。

 こういう一面的な覚え方はいけないんでしょうけど、今は悠長に勉強している暇がない。

2014年7月23日水曜日

Untrackedファイル

 Untrackedファイルってのはgitで追跡されていないので、addしないといけないものと勝手に思い込んでいた。
 テスト的に作ったファイル(アップロードした画像とか)も含めてしまっていたので、今後は注意せねば。

 git statusすると赤文字で表示されるから、commitできない困ったファイルという印象があった。単にいるかいらないかわからないよ、と言ってきているだけか。いらなきゃ放置か削除すればいい、と。あるいは.gitignoreに書くとか、かな。

参考:
2.3.4. 追跡されていない (Untracked) ファイル

Untrackedファイルを一括削除したい場合は下記の手順で確認しながら実行する。--dry-runの後に--interactiveするのがリスクが少なそう。手作業で削除するより早いし。--forceは無闇に使わない方が良さそうすね。
git clean --dry-run          # -nでもOK。Untrackedファイルの確認。
git clean --force             # -fでもOK。強制一括削除。
git clean --interactive     # -iでもOK。対話的に個別削除。

 ディレクトリも削除する場合は、-dらしい。

参考:
Untracked Files を削除する

2014年7月18日金曜日

git mergeやらrebaseやら

 gitでブランチが枝分かれすると非常に不安になる。特にリモートの場合は。なんかポキッと折ってしまいそうで。

 gitの概念を知れば怖さも少なくなる、ということでmergeとrebaseを知る必要が出てきました。
 何はともあれ下記を読んだら図解がわかりやすく、gitでのブランチの動き方がよくわかってきました。このブログに説明を書く代わりにリンク張ります。
 こういうイメージででしか頭に入らないのってアホな証拠だな。以前の同僚に同じこと言っている人がいて、非常に親近感の湧いた記憶があります。
 こういう開発している人たちの頭の中ってどうなっているんだろうか。えらい人はプログラマーにもバカがたくさんいてさーと言うがそのうちオレもそういわれるんだろうと思うと泣けてくる。



参考:
チーム開発に必要なgit コマンドを神速で習得しよう!

2014年7月10日木曜日

git pushした後にcommit --amendしてpushしてみた

 コミット時のコメントを間違ってしまったのにpushしてしまって、amendしてもう一回pushしたらrejectされた。まぁ、当然ですよね。
~/work/awesome_events$git push
To https://github.com/xxx/awesome_events.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/xxx/awesome_events.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
~/work/awesome_events$gi pull
-bash: gi: command not found
~/work/awesome_events$git pull
Merge made by the 'recursive' strategy.
~/work/awesome_events$
別に何か対処した訳でもなく、あんたのブランチが古いからgit pullしてみろ、とヒントが書かれているので言う通り実行すると、 再帰的にマージしといたよというメッセージ。
 その後pushできましたが、誤ったコミット、修正後のコミット、そのときに自動で発生したマージ処理についてMerge branch 'master' of https://github.com/xxx/awesome_eventsというコメントとともにコミットが追加されていました。

 あぁ、こうなっちゃうのね。意図したこととは違ったけど、データが壊れていないのでよしとする。でも誤ったコメントが入ったままなのは今後なんとかしないと。

2014年6月24日火曜日

リモートのトピックブランチをpullする方法

 リモートにあるトピックブランチをpullする場合は、下記を実行する。
$ git branch new-branch origin/new-branch
$ git checkout -b new-branch origin/new-branch #ブランチ作成後に移動
参考:
Git で新しいリモートブランチをローカルに持ってくるときに git pull してはいけない理由

2014年6月20日金曜日

Gitの初期設定と基本操作

 GitはGUIになれているダメな人間からすると、いったい今どんな状況なのかわかりにくくて不安になるバージョン管理システムです。が、大変有用らしい。

 インストール後、端末ごとに一回だけ行うイニシャライズ。
$ git config --global user.name "あなたの名前"
$ git config --global user.email your.email@example.com
  Railsチュートリアルでは、長い予約コマンドのエイリアスを作っておくと便利だと書かれています。下記はcheckoutをcoとする例。
$ git config --global alias.co checkout
下記でgitコマンドの結果をカラー表示できる。
$ git config --global color.ui true
git configの設定値を確認するには-lオプション。
$ git config -l 

参考:
git config 備忘録

 コアエディタも設定しています。例ではSublime Textに設定しています。commit時にエディタが起動してコメントを記入できたりもします。保存して閉じるとターミナルに戻される。
$ git config --global core.editor "subl -w"
アプリケーションのルートディレクトリでリポジトリの初期化。
$ git init
Initialized empty Git repository in /Users/mhartl/rails_projects/first_app/.git/
 ルートにある.gitignoreファイルで、Gitの管理対象から除外するファイル・ディレクトリを指定します。以下はRailsチュートリアルで推奨していたもの。
# Ignore bundler config.
/.bundle
# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal
# Ignore all logfiles and tempfiles.
/log/*.log
/tmp
# Ignore other unneeded files.
doc/
*.swp
*~
.project
.DS_Store
.idea
bundler_stubs/ #RVM使用時
ファイルをGitに追加する。再起的に処理されるので、'.'であればルートディレクトリとそのサブディレクトリを含めて全てが対象となる。
 追加後、且つコミット前のこの状況(抽象的ですが待機場所)はステージングエリアと呼ばれる。
$ git add .
コミット前のファイルを確認するには、下記のgit statusコマンドを使う。
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   README.rdoc
#       new file:   Rakefile
 変更を保存(コミット)するには、git commitを使う。-mオプションで、続く文字列がこのバージョンのコメントとして入る。
 -mオプションをつけない場合、コマンド実行後にコメントを聞かれる。
$ git commit -m "Initialize repository"
$ git commit
 コミットの履歴はgit logで確認できる。logの閲覧モードからは'q'キーで抜けられる。
$ git log
commit df0a62f3f091e53ffa799309b3e32c27b0b38eb4
Author: Michael Hartl <michael@michaelhartl.com>
Date:   Thu Oct 15 11:36:21 2009 -0700
  Initialize repository
その他にもこんな表示方法がある。
$ git log --oneline   # 1行ずつの簡易ログ表示
$ git log -p             # 過去commitの詳細表示
$ git log -stat         # 最新commitの統計的な変更状況表示
$ git diff                 # 最新commitと現在との内容比較
$ git diff --cached  # ステージング後のファイルは--cachedオプションをつける
 あまり複雑なことをしようとしたら、素人的にはcuiよりもSourceTreeとか使った方が絶対いいけど。間違いもないし。

 gitで管理していてもあたしなんて乱暴にエクスプローラからファイルを追加したり削除したりしちゃってるけど、本来はgit管理上での操作を明示的にするためにターミナル上で下記のように削除や移動、リネームをすべきらしい。
$ git rm index.html
$ git mv index.html index.html.erd

2014年6月19日木曜日

ローカルをリモートブランチで強制的に置き換えたい

git fetch origin
git reset --hard origin/master
参考:
gitでリモートのブランチにローカルを強制一致させたい時

 master以外でのpullでは下記のようなコマンドも。どっちがいいのかはよくわからない。
git branch new-branch origin/new-branch
参考:
git pullの詳細な挙動を追ってみる

git commitの上書きと取り消し

 ど素人なもので、commitしたのにあれ?まだやることあった、なんてことは日常茶飯事です。
 以下は覚えておかないといけません。

 まずamend。コミット後にファイル操作を追加した場合、前回のコミットを再適用(上書き)してくれます。でもこれはlogに残るので私のやりたいことではないみたい。
 amend(ment)にはあまりいい思い出がありません。英語なんて読めないのに仕事で英文の契約書agreementを読む必要があって、なんとか読み終わったら今度は長い追加・補足契約書amendmentが出てきたことを思い出します。
$ git commit --amend
コミットそのものを取り消してしまいたいときには以下を。これこれ。これがやりたいこと。HEADを一つ前のコミット時に移動させる意味?
$ git reset --soft HEAD^
下記でコミットと合わせてファイルの修正点も以前の状態に戻るようです。
 git reset --soft と git checkout -f、両方の性質を持っているということかな。まぁ、無闇に使うものではないのかも。
$ git reset --hard
間違ってresetしちゃった!ってときはORIG_HEADでreset前に戻れる。
$ git reset ORIG_HEAD 
下記の記事はHEADの意味も含めてわかりやすかった。

参考:
git reset についてもまとめてみる
【git】SourceTreeで解説!間違えたときのgitコマンドとやり方
GitのHEAD/ORIG_HEAD/FETCH_HEADについてのメモ

2014年6月18日水曜日

Gitでコミット前の編集を破棄する

% git checkout -f
タイトルとコマンド一行、なんてエントリーが増えるかもしれない。
 順序は行ったり来たりとカオスな状態でも、とにかくメモしておこう。

参考リンク

 追記。

 上だと変更は元に戻るけど追加されたファイルは削除されないので、下記でファイル確認と削除を行う。
 -dをつけるとディレクトリも対象にできるみたいだけど、試したらlog/とか怖いものを削除しようとしていたので、やらない方がいいかも。.gitignoreの対象が含まれちゃうのかな?
git clean --dry-run  #確認
git clean -f              #削除
参考:
Untracked Files を削除する