Git初心者が作業する方法
この手の記事無限にあると思うけど、友人のためにまとめときます
おことわり
何か間違ってたら @RyoNkmr_ までお願いします
想定読者
- 作業環境に git 導入済み
- git 使って開発したいけど git のコマンドが全然わからん
- GitHub にアカウントを持っている
- GitHub に 作業環境の SSH 公開鍵を登録してある
書かないこと
- 想定読者の環境にする方法
- Git って何
- Conflict の解消方法
-
GitHub って何
- Pull Request の出し方
- SSH について
-
origin/master
をぶっ壊しそうな操作- git rebase
-
初心者が知る優先度が低いこと
- empty commit とか
1 から Git と GitHub を使った開発の準備
git も GitHub も触ったこと無いって人が独学でやるっていうなら多分これ。既存プロジェクトへの参加ならスキップして次へ
1. (GitHub) リポジトリの作成
"New Repository" からリポジトリ作成画面を開く
項目 | 説明 |
---|---|
Repository template | わからないなら No template でよい |
Owner | わからないなら <あなたの名前> でよい |
Repository name | (必須) 作る予定の物の名前を入れる。半角英数、決まらないなら欄の下に How about xxxxx? と勧めてくれるので、気に入ったらクリックすればその名前が入る |
Description | わからないなら空欄でよい |
Public / Private | 全世界に作業内容と作ってるものの中身を公開してもいいなら Public 見せたくないなら Private . 無料プランで Private でも最大 3 人まで 他の GitHub ユーザーを共同作業者として招待できる |
Initialize this repository with a README | いらない チェックしない |
Add .gitignore | いらない None |
Add a licence | 作るもののライセンスを決める。わからないなら None 、好きなやつを選ぶ |
2. (GitHub) リモートリポジトリの URL を控える
作成直後の画面上部の URL
リポジトリ作成時に Initialize this repository with a README
にチェックしてた場合は、画面右緑色ボタン Clone or download
より確認できる
3. (Git) GitHub で作ったリモートリポジトリをローカルに登録する
GitHub から手元の環境に戻って git の作業に入る。
(手元に特に何のソースも文章もない場合)
既に何かある場合は次へ。適当に README.md
を下記コマンドで作るか、
echo "# My project" >> README.md
Ruby on Rails なら rails new .
なり npm なら npm init
してファイルを生成する
多少順番が前後してるけど、前項の画像見ると全部書いてある
それぞれのコマンドが何やってるのか知りたい場合、一旦作業全部覚えてから復習してください。
手順 | 操作 | 説明 |
---|---|---|
1 | GitHub でリポジトリ作成 | - |
2 | ファイルを作る | 変更が無いと push できない |
3 | git init |
ローカルの git repository を初期化する |
4 | git remote add origin リモートリポジトリのURL |
リモートリポジトリの登録。URL は GitHub 上で確認できる |
5 | git add . |
commit 対象の変更を stage する。ここでは作ったファイルが new file として追加される |
6 | git commit -m "変更についての説明" |
stage した変更を現在のブランチに積む。-m 忘れると vi や nano 開いちゃうので初心者は注意 |
7 | git push -u origin master |
ローカルブランチ (初期状態なら master ) の commit をリモートのmaster ブランチに反映する。commit の積み方が矛盾してると怒られて Push できない。初回は -u つけないと push できない |
8 | 作業する | 後で説明します |
origin
とか -u
-m
が気になるかもしれないけど、更にわからん概念とか名前が出てきて進まなくなるので、一旦これはそういうものだと覚えるといいです。コマンドとオプションの意味は調べるのは全部終わってからにしましょう。
ちなみに本当は変更がなくても push できるんですけど初心者には必要ないです。忘れていいです。
既存プロジェクトで開発準備
プロジェクトのリポジトリ画面右、緑色ボタン Clone or download
よりリモートリポジトリの URL を確認
手順 | 操作 | 説明 |
---|---|---|
1 | git clone リモートリポジトリのURL |
リモートリポジトリをローカルにまるごとコピーする。URL は GitHub 上で確認できる |
2 | 作業する | 後で説明します |
Git を使った開発作業
前項までで省略した 作業する の中身です。普段の開発作業は基本この流れになるので繰り返して覚えましょう。
手順 | 操作 | 説明 |
---|---|---|
1 | git checkout master |
master ブランチに移動する |
2 | git pull |
リモートの master 最新状態をローカルの master に引っ張ってくる |
3 | git checkout -b ブランチ名 |
(最新の master の頂点を根にして) 新たなブランチを作成しつつ、それに移動する |
4 | ある程度作業する | コミットの大きさはプロジェクトとかの文化や作業者の好みによる。初心者は「その作業に名前がつけられる」まで作業したらコミットすると良い |
5 | git add . |
余計なものいじってなければプロジェクトのルートディレクトリ以下の変更をすべて stage していいはず |
6 | git commit -m "変更についての説明" |
stage した変更を現在のブランチに積む。繰り返すけど、-m 忘れると vi や nano 開いて右往左往するので、忘れない要注意。ミスったら操作方法検索するなり聞くなりしてください。 |
7 | 4〜6 を繰り返す | - |
8 | git push -u origin HEAD |
今いるローカルブランチ の commit をリモートの同名ブランチに反映する。初回は -u つけないと push できない |
9 | 4〜6 を繰り返す | - |
10 | git push |
今いるローカルブランチ の commit をリモートの同名ブランチに反映する。 |
こんなときどうすれば!
git push
したら upstream がないって怒られて失敗した
fatal: The current branch readme has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin ブランチ名
書いてあるとおりに打つか、git push -u origin HEAD
でいいです。この場合の HEAD
は「現在のローカルブランチと同名」という意味です。
わざわざ手打ちするとミスる確率が無駄に上がるので HEAD
を使ってください。
ブランチ名間違えた。今いるブランチ名を変更したい。
git branch -m 新ブランチ名
新しいブランチ作るの忘れて、間違えて master に commit してしまった
commit が 1 つだけなら git reset --soft
して commit だけ取り消してチェックアウト&そこでコミットすればよい
git reset --soft HEAD~
git checkout -b 新ブランチ名
git commit -m "コミットメッセージ"
あるいはローカルの master
を一旦別名に変更する。 upstream が master 向いたままになってるので一旦外す
git branch -m 新ブランチ名
git branch --unset-upstream
A
から一旦他のブランチ B
に切り替えて作業して、 再びA
戻りたい
git checkout ブランチ名
で既存ブランチに切り替えられます
手順 | 操作 | 説明 |
---|---|---|
1 | git checkout A |
A ブランチに移動する |
2 | 作業する | ブランチ A 上でやりたいことやる |
3 | git add . |
作業内容全部 stage にいれる |
4 | git commit -m "Aで作業した内容" |
作業内容を commit する |
5 | git checkout B |
B ブランチに戻る |
やりがちなのは A
で作業したはいいけど git commit
忘れて、変更内容を B
に持ってきて、そのまま混ぜて作業してしまうケース。commit 積んだあとの修正は面倒なので気をつける。場合によっては歴史改変が必要になって初心者お手上げになる。その場合は周りの強い人に助けてもらうと良い。
git checkout -b ブランチ名
したら fatal: A branch named 'ブランチ名' already exists.
って怒られてブランチが作れない
既にローカルに同名ブランチが存在している場合は、新規作成&切り替えオプションである -b
が失敗します。
別のブランチ名にするか、あるいは、その既存ブランチが GitHub 上で master
に merge
済みであることが確かならば、リセット(上書き新規作成)&切り替えオプションの -B
を使いましょう:
git checkout -B ブランチ名`
master に merge 済みのローカルブランチを一括で消したい
git checkout master && git fetch -p
git branch --merged master | grep -vE '(master|develop)' | awk '{print $2}' | xargs -I % git branch -d %
特定のディレクトリやファイルだけ stage したい
git add ディレクトリやファイルのpath
直前の commit に変更を追加したい
git add 変更があったファイル # カレントディレクトリ以下全てで良かったら git add .
git commit --amend --no-edit
直前の commit に変更を追加してコミットメッセージも変更したい
git add 変更があったファイル # カレントディレクトリ以下全てで良かったら git add .
git commit --amend -m "新しいコミットメッセージ"
直前の commit の commit message を変更したい
git commit --amend -m "新しいコミットメッセージ"
いくつか前に commit した内容を歴史改変したい
初心者が試行錯誤するとその過程で、消しちゃいけないものが消えたり、自分の作業内容ならまだしも同僚の仕事が無になったり、とにかく悪いことになりがちなので強い人に助けを求めましょう。
もしくは、歴史改変用のリポジトリを別に作って練習してみましょう。 git reset
や git rebase
で検索すると良いです。
GitHub 上で他の人のブランチが リモートの(origin) master に取り込まれたらしく、こちらの作業ブランチが古くなってしまった
outdated branch になって、(GitHub のリポジトリの設定) 次第で作っていた Pull Request の merge が Block されてしまうことがあります。 git pull origin master
でローカル作業ブランチに最新 master の差分を取り込むのが初心者にはおすすめです。
# 作業ブランチにいるとして
git pull origin master # origin/master の最新状態の差分を取り込んで、手元の作業ブランチを最新化する
git push # リモートに上げる
git rebase
でやる方法もあるんですが、初心者はやめておきましょう。おすすめしません。