git初心者による初心者なりのメモ

元々svn歴1年間、今のところgit歴約1週間くらいです。
gitを使用する目的は、
・個人的な、ソースコードのバージョン管理(開発に使用するPCが多いため)
・さくらレンタルサーバーにsvnを導入するのはめんどくさそう
・使っている人が多そう
程度です。

今のところ、第1の目的は果たしているので、初心者による初心者なりのメモです。
間違っている可能性も高いです。

    下記のメモの簡単な補足

  • sshのconfigに、sakuraというホストを登録しています
  • セットアップ例は、こちら
  • リモートのリポジトリは、~/git/repos.git/
  • ローカルのリポジトリは、~/local/git/
  • リモートはさくらのレンタルサーバー、ローカルはCygwin環境

まず最初にローカルに複製

ローカルリポジトリを複製しています。
複製例なので、出来立て空っぽのリポジトリです(Warningはそれが原因)。

$ cd ~/local/git/
$ git clone sakura:~/git/repos.git .
Cloning into '.'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

最初のコミット

空っぽのREADMEファイルを作成してコミットし、プッシュしておきます。

$ touch ERADME
$ git add README
$ git commit -m "最初のコミット"
[master (root-commit) ***] 最初のコミット
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode *** README

これで、ブランチを確認すると、以下のようになります。

$ git branch
* master

ローカルのブランチでの編集

gitがsvnと異なる特徴の一つが、
「コミットをローカルで行うことができる」
だと思っています。
なので、リモートのmasterリポジトリを毎回書き換えるのではなく、ローカルにlocalというブランチを作成し、区切りが良いところでmasterに合流させる、という方法を取ります。

まずは、ローカルブランチlocalの作成

$ git branch local

ブランチを確認すると以下のように増えています。

$ git branch
  local
* master

ここで、ローカルブランチに切り替えます。

$ git checkout local
Switched to branch 'local'

あとは、以下のように色々と変更を加えてコミットしていった後とします。

$ git branch
* local
  master

$ git log
commit ***
Author: user <mail>
Date:   ***

    index.phpの編集

commit ***
Author: user <mail>
Date:   ***

    index.phpの作成

commit ***
Author: user <mail>
Date:   ***

    最初のコミット

この時点でmasterリポジトリに切り替えると、以下のように変更点に差が発生しています。

$ git checkout master
Switched to branch 'master'
Your branch is based on 'origin/master', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

$ git show-branch
! [local] index.phpの編集
 * [master] 最初のコミット
--
+  [local] index.phpの編集
+  [local^] index.phpの作成
+* [master] 最初のコミット

そこで、masterブランチに、localブランチの変更点をマージさせます。
(マージという単語の使い方が正しくないかもしれませんが)

$ git merge local
Updating ***
Fast-forward
 index.php | 2 ++
 1 file changed, 2 insertions(+)
 create mode *** index.php

すると、両方のブランチの変更点が一緒になっていることが分かります。
ここで、リモートリポジトリにmasterリポジトリをプッシュしておきます。

$ git show-branch
! [local] index.phpの編集
 * [master] index.phpの編集
--
+* [local] index.phpの編集

$ git push origin master
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (8/8), 739 bytes | 0 bytes/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To sakura:~/git/repos.git
 * [new branch]      master -> master

この時点でタグを追加したい場合は以下とします。
タグv0.01を作成して、タグ一覧をリモートリポジトリにプッシュしています。

$ git tag v0.01
$ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0)
To sakura:~/git/repos.git
 * [new tag]         v0.01 -> v0.01

別のローカル環境での同期

先ほどは、masterリポジトリにlocalリポジトリをマージしていました。
別のローカル環境では、最初にmasterリポジトリに変更点を反映させる必要があるため、以下のようにします。

ここでは、masterリポジトリにチェックアウトしてから、リモートから変更点を反映しています。

$ git checkout master
$ git fetch
$ git merge

そして、masterブランチからlocalブランチにマージすれば完了です。

$ git checkout local
$ git merge master

よく使っているコマンドダイジェスト

基本的に、以下のコマンドですべて事足りているのと、今後も事足りそうです。
個人的にしか使っていないので、今のところ今後も増えそうに無いです。
グループで管理する必要がある場合には、色々とセオリーの勉強が必要になりそう。

  • git checkout local で、localブランチにチェックアウト
  • git add と git rm と git mv で、各種ファイルの追加や削除、移動
  • git commit -m “コメント” でコメント付きでコミット
  • git push origin master で、masterブランチをプッシュ
  • git fetch からの git merge:リモートリポジトリから変更点を反映
  • git branch で現在のブランチの確認
  • git show-branch で、各ブランチの情報
  • git status で現在の状態確認
  • git diff で直後のコミットとの差分表示(コミット前)

1 thought on “git初心者による初心者なりのメモ

  1. ピンバック: 【Rails5-Git】pushの際にpermissionエラーになった際、ググりまくったら解決した話 - 28歳からはじめるフリーランスLIFE!

コメントは停止中です。