Linux
Git
GitHub
初心者
初心者向け

【目的別】Github手順書【初心者向け】


当記事の目的


以下の悩みを解決


  • GitHubのコマンドが書いてあるページはたくさんあるけど、現状に合わせてどう組み合わせて使ったらいいか分からない

  • はじめてGitHub触るけどぶっちゃけ何から手を付けたらいいか分からない


前提条件


  • 構成管理システムの概念的な話は一切触れません

  • GitHubのコマンドをインストール済みで、Linux上でGitHubにアクセスすることを想定

  • fetchとは何か、mergeとは何か、ローカルリポジトリとは?originとは?みたいな話は別のまとめを見てください。気が向いたら参考ページ張ります

  • 筆者がGitHubに慣れていくにつれ加筆されていきます

Windows環境の人は、インストールについてはそれなりに手間なので、【Windows】Gitの環境構築を参考にしてください。Linux環境の人はデフォルトでインストールされていることがほとんどですが、なければsudo apt-get install gitしてください。

インデックスを見ながら、自分に合った目的をお探しください


GitHubコマンド手順


case1 : 開発チームに入ったぞ!早速ローカルのフォルダにリモートのソースコードをクローンしてこよう!


手順


  • 自分のリポジトリにアクセス

    画像


  • Clone or downloadをクリックし、表示されたURLを控える(https://github.com/自分のリポジトリ.gitとする)


  • ローカルリポジトリを作成したいフォルダに移動



  • $ git clone https://github.com/自分のリポジトリ.git -b branch_name local_folder_name


    • branch_nameは、リモートのどのブランチをクローンするか指定

    • local_folder_nameは、作成するローカルリポジトリの名称(デフォルトはリモートURL-ブランチ名



  • ユーザID、パスワード入力を求められるため、GitHubにログインする際のユーザ名とパスワードを入力する



詰まりそうな点


case2 : ブランチを分けてカスタマイズをするぞ!まずはブランチを分けよう!


手順


  • gitクローンされた、ローカルリポジトリ下にいることを確認


  • $ git branchでブランチの状態を確認

shun@shun-VirtualBox:~/xxx/yyy$ git branch

* original_branch_name



  • $ git checkout -b new_branch_name original_branch_nameで新ブランチ作成


    • new_branch_nameは、作成する新しいブランチの名称

    • original_branch_nameは、基にするローカルのブランチ名称

    • リモートからチェックアウトする場合は$ git checkout -b branch_name origin/branch_name


      • origin/branch_nameがリモート、branch_nameがローカル






  • $ git branchでブランチの状態を確認

shun@shun-VirtualBox:~/xxx/yyy$ git branch

original_branch_name
* new_branch_name


case3 : カスタマイズが終わったから、分岐したローカルブランチに対してコミットしよう!


  • gitクローンされた、ローカルリポジトリ下にいることを確認


  • $ git statusでチェックアウトしてからの変更情報を確認



    • deleted: moved_file.pyは、消去されたファイル(実際にはファイル移動)


    • modified: changed_file.pyは、変更が加えられたファイル


    • deleted: deleted_file.pyは、消去されたファイル


    • new_file.pyは、新規で作成されたファイル


    • new_folder/moved_file.pyは、新規で作成されたファイル(実際にはファイル移動)



shun@shun-VirtualBox:~/xxx/yyy$ git status

ブランチ new_branch_name
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: moved_file.py
deleted: deleted_file.py
modified: changed_file.py

追跡されていないファイル:
(use "git add <file>..." to include in what will be committed)

new_folder/moved_file.py
new_file.py

no changes added to commit (use "git add" and/or "git commit -a")


  • この状態を想定して、まずはaddしていく


    • $ git add moved_file.py

    • $ git add deleted_file.py

    • $ git add changed_file.py

    • $ git add new_folder/moved_file.py

    • $ git add new_file.py




  • $ git statusでaddした後の状態を確認


    • それぞれがrenamed, modified, deleted, new fileとしてコミット予定の発射台に乗っていることを確認する



shun@shun-VirtualBox:~/xxx/yyy$ git status

ブランチ new_branch_name

コミット予定の変更点:
(use "git reset HEAD <file>..." to unstage)

renamed: moved_file.py -> new_folder/moved_file.py
modified: changed_file.py
deleted: deleted_file.py
new file: new_file.py

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

追跡されていないファイル:
(use "git add <file>..." to include in what will be committed)

no changes added to commit (use "git add" and/or "git commit -a")



  • $ git commit -m 'message'でコミットを実行


    • messageは任意のコミットメッセージを入力




詰まりそうな点


  • 間違えてaddして、取り消したい場合は$ git reset HEAD added_fileを実行。$ git reset HEADまでは固定。renameの場合は、変更前のファイルと変更後のファイルに対して両方resetする必要がある

  • commit時にメッセージは必須で、-m以降を入力しないとvimが開いてしまう


case4 : ローカルのブランチにコミットしたぞ!リモートブランチにも反映しよう!


手順



  • $ git push origin new_branch_name


    • originは固定値

    • new_branch_nameはリモートに反映させたいブランチ名称

    • new_branch_nameがリモートにない場合は、新規に作られる




詰まりそうな点


  • リモートに同一名称のブランチがない場合は、new_branch_nameが新規作成される


case5 : ローカルのブランチを、リモートのブランチの状態に合わせたい!

ローカルで色々更新したんだけど、やり直したい場合を想定。同一名称のリモートブランチに別のマージが入っている場合は、以下のやり方ではなく素直$ git pull origin developでプルをする。


手順



  • $ git fetch origin


    • [new branch]となっているブランチは、ローカルには無いけどリモートに存在するブランチ

    • original_branch_nameは、ローカルにもリモートにも存在するブランチ



shun@shun-VirtualBox:~/xxx/yyy$ git fetch origin

remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), done.
From https://github.com/自分のリポジトリ
* [new branch] new_branch -> origin/new_branch
c5996a4..47d6cc0 original_branch_name -> origin/original_branch_name



  • $ git reset --hard origin/original_branch_name



    • git reset --hard origin/までは固定、original_branch_nameは、合わせたいブランチ名称

    • fetchしてきたリモートのブランチを、ローカルの同一名称ブランチに反映させますよ!という命令




  • $ git checkout original_branch_nameで、reset後のブランチに移動する


  • $ git clean -df .で余分なファイルを削除する


    • ここまでの命令では、あくまで更新情報/新規作成情報のみをリモートから取得できるが、不要ファイルの削除をしてあげる必要がある

    • ここまで実行することで、リモートブランチと全く同じ状態になる




詰まりそうな点


  • fetchって何?と思う人は、リモートリポジトリとローカルリポジトリの中間層があると思えばよい。そこを「origin」と呼んでおり、リモートをoriginに反映させる処理をfetchと呼ぶ。originを使ってローカルリポジトリをどうするかが、reset以降のコマンド【入門者向け】Gitのfetchコマンドについて図を用いて解説


case6 : 1つ1つaddするのめんどくさいから一括でaddしたい!


手順



  • $ git add -u


    • トラッキング(バージョン管理)されているファイルについて、すべてaddされる

    • つまり、「削除されたファイル」、「変更されたファイル」はaddされ、「新規作成されたファイル」はaddされない




  • $ git add -A


    • トラッキング(バージョン管理)されていないファイルも含めて、すべてaddされる

    • つまり、「削除されたファイル」、「変更されたファイル」、「新規作成されたファイル」がaddされる




  • $ git add .


    • カレントディレクトリ以下に対して、$git add -Aを実行する




case7 : プルリクも承認されたし、不要ブランチを削除するぞ!


手順


まずはローカルのブランチから削除していく

もし現時点でリモートブランチは削除されているが、ローカルブランチが削除されていない場合は、以下のコマンドで一発で完了する


  • $ git fetch --prune

リモートブランチも残っている場合は、以下の手順で行う



  • % git branch


    • まずは現在のブランチの状態を確認

    • developにマージが完了しており、updateDevelopを削除したいとする



shun@shun-VirtualBox:~/workspace/global$ git branch

develop
* updateDevelop



  • $ git checkout develop


    • このままでは削除できないので、developブランチに移動する



マージが完了している場合



  • $ git branch --delete updateDevelop


    • 不要ブランチを削除する



マージが完了していないが削除したい場合



  • $ git branch -D updateDevelop


    • 不要ブランチをマージをせずに削除する

    • ※これまで反映したcommitは削除されるので注意




次にリモートブランチを削除する



  • % git branch --remote


    • まずは現在のリモートのブランチの状態を確認

    • ローカルでは削除したupdateDevelopが残っている



shun@shun-VirtualBox:~/workspace/global$ git branch --remote

origin/HEAD -> origin/master
origin/develop
origin/updateDevelop



  • $ git push --delete origin updateDevelop


    • 不要ブランチを削除する



もしくは以下のコマンドでも可能


  • $ git push origin :updateDevelop


最終的なブランチの状態を確認する


  • $ git branch --all

shun@shun-VirtualBox:~/workspace/global$ git branch --all* develop

remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/develop


case8 : 親ブランチにされたコミットを、今の作業ブランチに反映させたい!

developブランチで作業している際に、masterブランチにコミットが入りました。そんな時はrebaseを使います。

ブランチの状態は以下の通りで、origin/maseterにコミットが加えられている

shun@shun-VirtualBox:~/workspace/global$ git branch -a

master*
 develop
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/develop



  • $ git checkout -b master origin/master


    • まずはローカルに、masterブランチをcheckoutします




  • $ git pull origin


    • リモートmasterブランチへの反映を、ローカルのmasterブランチにも行います




  • $ git checkout develop


    • 元々作業していたdevelopブランチに移動します




  • $ git rebase master


    • masterブランチへのコミットを、現在の作業ブランチに反映ささせます



現時点のブランチの状態は以下の通りで、ローカルのmasterとdevelopは同じ状態

shun@shun-VirtualBox:~/workspace/global$ git branch -a

master
 develop*
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/develop

リモートにも反映させる場合は、プッシュをしてあげればOK


  • $ git push origin develop

続く