Git初心者が読むメモ

一人でコードの開発をするときにも、バージョン管理とバックアップも兼ねてのリモートリポジトリの利用は便利だなと思います。 そのために必要なコマンドのメモ集です。 最近はGitHubでもprivateリポジトリを無料で持てるので、一人開発もGitHubを使用しています。

git-scm.com

Gitの基本操作

  • git init/git clone: Gitリポジトリの作成/取得
  • git branch/ git checkout: ブランチによる作業場所の確保
  • git merge: 変更を取り込む
  • git push: ローカルリポジトリをリモートリポジトリに反映する

初めてのGit作業の手順

プロジェクト用にからのディレクトリを作成する

そのディレクトリで git init を実行する

git init

.git fileが作成されリポジトリのmaster が作られる.
すでにリモート上にリポジトリが存在するときにはgit cloneを使用して、リモートからローカルにcloneする.

git clone --recursive https://someuser@bitbucket.org/someuser/test.git

README.md fileを作成する

管理対象に追加(ステージングエリアに上げる).

git add <file/dir name>

or

git add .

ファイルをGitで管理しないようにする

.gitignore ファイルを作りそこにfileName/dirName書き込む

ファイルの状態の確認を行う(変更されたファイルの一覧)

git status

コミットするためにユーザー名とメールアドレスの設定が必要

git config --global user.email "abc@def.ghi"
git config --global user.name "Hoge hoge"

(--globalを付けるとそのPCでのすべての操作に関してこの内容を使う)

gitの設定の確認

git config --list

変更差分の確認

git diff

ステージングされた後のファイルに対しては
git diff --cached

コミットを行う

コメントをつけてcommitするには

git commit -m "first comment"

詳細な変更も記述してcommitを行うには

git commit -V

コミットの確認 (最後にコミットされているファイルと現在のファイルの比較され、差分が表示される)

1commitにつき1行だけのコンパクト表示

git log --oneline

変更箇所の詳細表示

git log -p xxxxxx

どのファイルがどれくらい変更されてるかの統計情報

git log --stat

コミットしたファイルをGitの管理から外し削除する

git rm finename
git rm -r directoryname

ファイルは削除せずにGitの管理から外すだけ

git rm --cached

(.gitignoreに書き込んでおく)

リモートリポジトリへ登録

gitHubにアクセスし、新規リポジトリを作成する
1. gitHubにアクセスし、新規リポジトリを作成する
2. 右上のタブから"New repository"を選択
3. Repository name を決める
4. private/publicの選択
5. create repositoryをクリックしてリポジトリを作成する

remote repositoryへの登録

git remote add origin https://github.com/hogehoge/hogename.git

ローカルでの開発内容を共有リポジトリに反映させる

git push -u origin master

-uオプションは次回から入力を省略するためのもの
git push -u origin master とすると、次回から git push だけで引数に指定した origin master で勝手に push してくれる
ユーザ名やパスワードを聞かれるので入力
origin は共有リポジトリのこと。レポジトリの場所(URL)の別名
master はブランチの名前
master は大事なブランチなので、個人利用では自由にpushしても大丈夫だがチームでの場合はmasterには通常pushしない
ブランチはGUIから確認可能(<>Codeタブのすぐ下に n branches と出ていて、クリックすると詳細が見れる)

以上で、初めてローカルリポジトリを作りそれをリモートのmasterブランチに反映させる方法が終了.

実際に作業は、共同作業ということを考えるとコード集約を妨げないように、自分専用のブランチを作って、そこで作業を行う.
  1. まずは現在のブランチを確認: git branch
  2. のついていものが現在のブランチ
  3. 新しブランチを作成する: git branch ブランチ名
  4. ブランチ切り替え: git checkout ブランチ名
  5. ブランチ先へのコミット(上で書いたmasterへの作業と同じ)
  6. 状態確認をする:
    • git status
    • git diff
    • git commit -m "hogehoge"
  7. リモートにPushする:
    git push origin ブランチ名
ブランチでの作業が終了して、ブランチをmasterにマージする
  1. マージ先(master)に移動: git checkout master
  2. 作成したブランチをマージ先にマージ:git merge ブランチ名
  3. ログ確認(変更内容がマージ先に反映されているか確認): git log
  4. リモートに反映: git push origin master
  5. マージが終了したので、作業用ブランチを削除: git branch -d ブランチ名
  6. ブランチの削除をリモートに反映: git push origin :ブランチ名
    (コロンを忘れないように)

ローカルリポジトリのmasterブランチにリモートリポジトリoriginのmasterブランチを取り込みたいとき

git checkout master #(ブランチをマスターに切り替え)
git fetch origin master #(リモートリポジトリからコピーする)

ファイルやディレクトリ名を変更したり、移動する

git mv <sourceFilename> <dstFilename>

ブランチ名変更

git branch -m <sourceBranchName> <dstBranchName>

ブランチ削除

git branch -d <BranchName>

ブランチの切り替え

git checkout <BranchName>

ブランチのマージ

git merge <BranchName>

ブランチの状況の確認には

git log --all --graph --pretty=oneline
既にgitHub上にリポジトリがあるときにローカルに新たにディレクトリを作成しgit initしてファイルを追加したりすると何がおきるか
git push -u origin master

error: src refspec master does not match any.
error: failed to push some refs to 'https://github.com/hoge/hogehoge.git'
となりエラーが出る

既にgitHub上にリポジトリがあるときにローカルに新たにディレクトリを作成しgit clone してから、ファイルを追加したりすると何がおきるか

add -> commit -> push で新たなファイルをリモートリポジトリのmasterに登録できた

[ここまでをまとめると]

Gitサーバー上でプロジェクトを作成.すると,内容が空のリポジトリができる(GUI 操作)
Gitサーバーからリポジトリを複製して,手元に作業ツリーを作成 (git clone).空の作業ツリーができる.
作業ツリーにソースコードを追加し,フォルダをGitに追加 (git add)
変更をコミットする (git commit)
コミットした変更をGitサーバに送り込む (git push)
他のメンバーもGit上のリポジトリを複製 (git clone) すると, ソースコード一式が既に入った作業ツリーが取得できる

過去の状態に戻す方法:

git branch devbranch2 comitID