GitHub 公式サイト

目次

  1. GitHubとは
  2. Gitとは
  3. Gitの基本
  4. GitHubへユーザー登録する
  5. 新しくリポジトリを作成する
  6. Eclipseと連携
  7. 1つのプロジェクトにGitHubとBitbucketの両方を連携させる
  8. コミット&プッシュでGitHubサーバーへ反映
  9. 別ユーザーを追加
  10. Reset | リセット
  11. Resetで1つ前のコミットに戻す
  12. Revert | プッシュの取り消し
  13. 競合の修正方法
  14. SSHを設定する
  15. ファイルまたはフォルダをGit管理外にする | Ignore
  16. Gitとbitbucketの覚書


付録

  1. バージョン管理システム
  2. リポジトリとは
  3. リモートリポジトリとは
  4. ローカルリポジトリとは
  5. リモートリポジトリとローカルリポジトリの関係
  6. Eclipse側でリモートリポジトリの連携を解除
  7. ブランチとは
  8. masterブランチとは
  9. GitHubでブランチをブランチを切る(ブランチ作成)
  10. GitHubでブランチを切り替える
  11. Eclipse側にもブランチを作成する
  12. GitHubでブランチを統合する
  13. Eclipse側で不要になったブランチをローカルリポジトリから削除する
  14. Gitのコミット
  15. プルとは | pull
  16. フェッチとは | feche
  17. マージとは | merge
  18. プッシュとは | push
  19. 競合発生のタイミング
  20. non-fast-forward | ブランチでコミットに失敗したら・・・
  21. インデックスへ追加 | add
  22. Eclipseで add 操作
  23. インデックスの省略
  24. インデックスへ add する利点
  25. 間違えてインデックスに追加してしまったら
  26. ワークツリーとは
  27. HEADとは
  28. ORIG_HEADとは
  29. FETCH_HEADとは
  30. リモートリポジトリのコミット一覧を見る
  31. リベースとは | rebase
  32. 参考リンク

GitHubとは

GitHubはGitを使いやすくしたwebサービスのこと。
GitHub社により運営されており、有料版と無料版がある。
GitHub以外にもGitを利用したwebサービスはいくつか存在する。 (Bitbucketなど)

有料版と無料版の違い

無料版は、リポジトリが一般公開される。オープンソース向きである。
有料版は、許可したユーザーだけリポジトリにアクセスできる。社内向きである。


Gitとは

Gitとはバージョン管理システムのことである。

他のバージョン管理システムとの違い

Git以外のバージョン管理システムのリポジトリはサーバー上にひとつだけ作られる。
しかし、Gitの場合、サーバー上だけでなく、各ユーザーのディレクトリにもリポジトリが複製される。
サーバー上に作成されたリポジトリをリモートリポトリと呼び、 各ユーザーのディレクトリに作成されたリポジトリをローカルリポジトリと呼ぶ。
これによりネットワークに接続されていなくてもバージョン管理が行える。 (参考:リモートリポジトリとローカルリポジトリの関係)

リポジリトリが一つだけのときに起こる問題

リポジトリが1つだけだと、大勢の利用者により変更内容が競合し、整合性を維持するのが難しい。
そのためGitではリモートリポジトリとローカルリポジトリに分散している。
リポジトリをリモートリポジトリとローカルリポジトリに分けていることから、Gitは分散型バージョン管理システムと呼ばれている。

Gitは高速

Gitはもともと膨大なソースコードからなるLinux開発で用いられていた。そのため、巨大ソースコードでも高速に動く。


Gitの基本


Gitの基本


Gitのファイル管理場所は ワークツリーインデックスローカルリポジトリリモートリポジトリに分けられる。
バージョン管理の主な作業は、編集したファイルを共同管理場所に送ることである。※1
Gitではファイルの編集場所をワークツリーと呼び、共同管理場所をリモートリポジトリと呼んでいる。
つまり、ワークツリーからリモートリポジトリにファイル情報を送ることがGitでの主な作業である。 そして、ワークツリーからリモートリポジトリまでの間にインデックスとローカルリポジトリを経由することになる。



ファイル保管場所

ワークツリー
ワークツリー
インデックス
インデックス
ローカルリポジトリ
ローカルリポジトリ
リモートリポジトリ
リモートリポジトリ
add
add
commit
commit
push
push
pull
pull
ローカルPC
ローカルPC
GitHubサーバー
GitHubさーばー

上図にあるようにファイル管理場所はワークツリー、インデックス、ローカルリポジトリ、リモートリポジトリの4つ分けられている。
これがGitを難しいものにしている要因でもある。
しかし、それぞれには役割があるので以下に説明する。

ワークツリーからインデックスへのadd

通常、ワークツリーでファイルを編集したらコミットする、という流れであることが多い。
しかし、本来Gitでは編集ファイル情報をインデックスに記録したあと、コミットするという流れである。
1件ずつファイルをaddでインデックスに貯めておいてから、切りの良いところで一気にコミットするのである。

インデックスについて

インデックスからローカルリポジトリにコミット(Commit)

ローカルリポジトリへのコミット。Gitでコミットといえば、ローカルリポジトリへのコミットのことを指すことが多い。※3
インデックスはあまり表に出てこないので、ワークツリーからローカルリポジトリという感覚でコミットすることが多いが、 やはり内部ではインデックスを経由しているのである。

ローカルリポジトリからリモートリポジトリへプッシュ(Push)

ローカルリポジトリを共同管理場所であるリモートリポジトリ(GitHubサーバー)へ反映させる。
時折、他の人が編集したファイルと競合が発生するので、競合修正作業が必要になる。

リモートリポジトリからローカルリポジトリへプル(Pull)

リモートリポジトリに存在する他の人が編集したファイルを自分のローカルリポジトリとワークツリーに反映させる。
フェッチとマージの組み合わせでプルと同じことができる。
時折、他の人が編集したファイルと競合が発生するので、競合修正作業が必要になる。

ワークツリーからインデックスへのadd

ワークツリーはファイルを編集する作業場所であり、EclipseのPHPエクスプローラーに相当する。
インデックスはコミットするファイル情報を一時保管する場所である。
add という操作で編集したファイル情報をワークツリーからインデックスへ送る。
その後、commit操作でインデックスからローカルリポジトリへ編集ファイル情報を送る。


GitHubへユーザー登録する

GitHubを利用するには、まずユーザー登録を行う。
以下にユーザー登録の手順を示す。

手順

  1. GitHubのサイト「https://github.com/」にアクセスし、 「Sign up for GitHub」ボタンをクリック。


  2. ユーザー名、メールアドレス、パスワードを設定登録する。(Step 1)
    Username,Email Address,Password に新規入力し、「Create an account」ボタンをクリック。


  3. 無料版を使うなら「Unlimited public repositories for free.」にチェックを入れ、「Continue」ボタンをクリック。(Step2)


  4. アンケートに答え「Submit」ボタンをクリック。(Step 3)

  5. 設定登録したメールアドレスにGitHubからメールが届くので、「Verify email address」リンクをクリックする。
  6. 以上でGitHubへのユーザー登録は完了。
    これでリポジトリが作成できるようになる。

    新しいリポジトリの作成

新しくリポジトリを作成する

手順

  1. GitHubにログイン中の状態で、「https://github.com/」にアクセスする。
    そして、右上の「+」ボタンから「New repository」を選択する。
  2. 以下の項目へ入力する。
    項目名入力の説明
    Repository name リポジトリ名を入力する。
    Description 任意でプロジェクトの説明文を書く。
    Public/Private Publicにするとソースコード一般公開される。
    Privateは指定したユーザーだけアクセス許可するが、有料機能である。
    Initialize thi repository with a README チェックを入れるとREADMEファイルを作成する。GitではREADMEファイルを作成することが推奨されているため、チェックを入れる。
  3. 以下の画面が表示されたらリポジトリの作成成功である。

Eclipseと連携

GitHubサイト上で作成したリポジトリとEclipseを連携させる。
連携させると プッシュコミットフェッチプルマージなどのGit操作がEclipse上から操作できるようになる。

手順

  1. GitHubにログイン中の状態で、「https://github.com/」 にアクセスし、対象のリポジトリをクリックする。
  2. 「Clone or download」ボタンを押し、URL部分をコピーして保持しておく。
    保持したURLはEclipseの連携で使う。


    保持するURLの例
    https://github.com/amaraimusi/livipage_js.git

    注意

    SSHの設定をしている場合は、Use SSHをクリックしてからURLをコピーすること。
    SSH版URLの例
    git@github.com:amaraimusi/livipage_js.git
  3. Eclipseを起動する。
    File → Import と操作しImport画面を開く。
  4. Git / Projects from Git を選択して、Nextボタンを押す。
  5. Clone URI を選択して、Nextボタンを押す。
  6. URI: 」へ保持していたURLを入力する。 つづいて、User , Password に GitHubで登録したユーザーとパスワードを入力する。
    入力が終わったらNextボタンを押す。


    SSH版である場合
    ユーザーとパスワードによる認証は不要になる。
    Userは"git"、Passwordは空で良い。
  7. リポジトリのブランチを選択し、Nextボタンを押す。
  8. Directory にプロジェクトのフルパスを入力する。
    Initial branch,Remote nameはデフォルトのままでよい。 入力が終わったらNextボタンを押す。
  9. Import as general project (一般プロジェクト) を選択して、Nextボタンを押す。
  10. 何も入力せず、Nextボタンを押す。
  11. 以上で、GitHubと連携したプロジェクトが作成される。


    次へ:GitHubに編集したファイルを反映

Eclipse:1つのプロジェクトにGitHubとBitbucketの両方を連携させる

Eclipseの1つのプロジェクトに対して複数のGitサービスを連携させることが可能である。

例えばGitHubとBitbucketを1つのプロジェクトに連携させているとする。
編集してローカルリポジトリコミットプッシュを行うが、この時GitHubかBitbucketを選ぶことができる。
つまり、GitHubへプッシュしたら、続いてBitbucketを選んでプッシュするという芸当が可能になるわけである。

以下の例では、GitHubと連携済みのプロジェクトへ、さらに Bitbucketを連携させる手順について説明する。

Bitbucketを追加連携する手順

  1. Bitbucketのサイトにログインし、 新しくリポジトリを作成する。 そして、新リポジトリのページへアクセスする。
    「私はゼロからスタートします。」をクリックして、リモートURLをコピー取得しておく。



    リモートURL
    https://amaraimusi@bitbucket.org/amaraimusi/livipage_js.git
  2. 続いてEclipseを開く。
    Eclipseエクスプローラから対象プロジェクトを右クリックし、Team → Push Branch と操作する。

  3. New Remote ボタンを押す。
  4. Remote name に任意の名前を入力。
    URI に上記でコピーしたリモートURIを入力する。(Host,Repository path にも自動セットされる)
    Bitbucketで登録しているアカウントのUserとPasswordを入力する。
    入力が終わったらFinishボタンを押す。

  5. そのままNextボタンを押す。
  6. Nextボタンを押す。
  7. パスワードの入力がもう一度求められるので、上記と同じパスワードを入力する。

  8. OKボタンを押す。
    以上でbitbucketの連携完了。

  9. Bitbucketの対象リポジトリにアクセスし、ファイル群がアップされているか確認する。
    アップされていれば連携成功である。

  10. 以上で、GitHubとBitbucketに連携できるようになった。
    プッシュを行う際、GitHubかBitbucketを選択できるようになる。


コミット&プッシュでGitHubサーバーへ反映

GitHubサーバーに編集したファイルを反映できる。
おおまかな流れとして、まず編集したファイルをEclipse上の ローカルリポジトリコミットし、そしてローカルリポジトリからGitHubサーバーの リモートリポジトリプッシュする。

以下に詳細な手順を示す。

手順

  1. Eclipseを起動し、GitHubリモートリポジトリと連携したプロジェクトを開く。
    適当にファイル編集をする。


  2. 続いてローカルリポジトリへコミットする。
    プロジェクトを右クリックし、 Team → Commit と操作。

  3. Commit message に適当にメッセージを入力する。
    Files の項目でコミットするファイルを選択。
    入力が終わったらCommitボタンを押す。
    これでローカルリポジトリへコミットされる。

  4. ローカルリポジトリへのコミットが終わったら、次はリモートリポジトリへプッシュする。
    リモートリポジトリはGitHubサーバー側のリポジトリである。

    プロジェクト名を右クリック、Team → Push Branch 'master' を選択する。

  5. Remoto がGitHubであることを確かめてから Nextボタンを押す。


  6. Finish ボタン、続いてOK ボタンを押してプッシュを完了する。
    以上でローカルリポジトリからリモートリポジトリへプッシュされる。



  7. GitHubのサイトにログインして 対象リポジトリを開き、プッシュが反映されていることを確認する。




チームに開発メンバーを追加(別ユーザーを追加)

2021年7月現在

手順が変わったようだ。以下のリンク先を参照すること。
GitHub Docs コラボレーターを個人リポジトリに招待する

2021年6月までの古い方法

他のユーザーと共同開発する場合、リポジトリに共同開発するユーザーを追加登録する必要がある。

大まかな手順としては、リポジトリ管理するユーザーが他ユーザーを追加し、他ユーザーはそのリポジトリに参加手続きをするという流れである。
詳細な手順は以下の通り。

手順

  1. 管理ユーザーはGitHubにログインし、対象のリポジトリを開く。
  2. 上部メニューからSetting → Collaboratorsと操作する。
  3. 他ユーザーのアカウントを入力して、Add collaborator ボタンを押すと、他ユーザーにメール送信が行われる。
    以上で、管理ユーザー側の作業は終わり。
  4. 続いて、他ユーザー側の作業。
    GitHubから届いたメールを開き、View invitationボタンを押す。
  5. 他ユーザーによるサインインを行う。
  6. 以上で、他ユーザーはリポジトリに参加可能になる。
    このリポジトリをEclipseと連携させることももちろん可能である。(他ユーザー側による作業)

リモートリポジトリとローカルリポジトリの関係

作業内容をローカルリポジトリに反映する。
きりの良いところで、ローカルリポジトリからリモートリポトリに反映する。 (プッシュ)
リモートリポジトリを通して、他のユーザーの作業内容を自分のローカルリポジトリに反映することも可能。 (プル)


バージョン管理システム

複数の人がソースコードを編集するときに管理するシステムである。
ソースコードの変更履歴確認や復元などができる。
管理するソースコードなどのファイル群はリポジトリと呼ばれる。


リポジトリとは

ファイル群を一元管理する貯蔵庫である。
Gitのリポジトリは2種類あり、リモートリポトリローカルリポジトリに分類できる。


リモートリポジトリとは

共有サーバー(GitHubサーバー)に配置されているリポジトリ。
複数人で共有する共同管理場所である。


ローカルリポジトリとは

ローカルPC上に配置されるリポジトリ。
ひとりのユーザーだけが使う。


Eclipse側でリモートリポジトリの連携を解除

Git Perspective を開く。
Git Repositories ナビケーション → 対象プロジェクトをプルダウン → Remotes → 不要なリモートリポジトリ連携を右クリックして削除

ブランチとは

ブランチとはプロジェクトを複数に枝分かれさせてバージョン管理する機能である
複数人で機能別に開発するときや、開発ブランチ、本番ブランチなどソースコードを分けて管理するときに利用する。
基準となるブランチはmasterブランチである。

masterブランチとは

基準となるブランチをmasterブランチと呼ぶ。統合ブランチという呼び方もある。
GitHubではDefaultのブランチという扱いである。


GitHubでブランチをブランチを切る(ブランチ作成)

「Branch:master」をクリックして子画面を開き、ブランチ名を入力して作成ボタンを押すと新しいブランチが作成される。
また作成時に新ブランチに切り替わる。



GitHubでブランチを切り替える

左上にある Branche:○○ ボタンを押すと子画面が表示される。
この子画面に存在するブランチ一覧からブランチ切替ができる。


Eclipse側にもブランチを作成する

  1. あらかじめGithub側でブランチを作成しておく (参考:GitHubでブランチをブランチを切る
  2. PHPエクスプローラのプロジェクト名を右クリック → Team → Switch To → New Branche...
  3. Create Branch画面が開く
  4. Branche name でGithubで作成したブランチ名を入力し、Finishボタンを押す。
  5. 以上でブランチが作成できる。

GitHubでブランチを統合する

分岐したブランチを再びmasterブランチに統合することができる。
統合方法にはmerge(マージ)とrebaseがあるが、今回はmergeで説明する。

masterブランチに分岐ブランチをマージ(merge)する手順

  1. Branches タブをクリックしブランチ一覧を開く。
  2. 統合する分岐マージを確認。
    分岐マージの New pull request ボタンを押す。
  3. Create pull request ボタンを押下。
  4. 修正ファイルに競合がなければ、競合はないとのメッセージが表示される。
    そのまま Merge Pull request を押下。
  5. Confirm merge ボタンを押してマージを実行する。
  6. マージ完了。
    ブランチが用済みなら Delete branche ボタンを押して削除する。
  7. 一覧ページに戻り、ブランチが統合されていることを確認する。

Gitのコミット

Gitにおけるコミットとはリポジトリに修正ファイルを記録すること。
コミットすることにより、過去の修正情報を参照したり、過去の状態に戻したりすることが可能になる。

コミットにはリモートリポジトリのコミットと、 ローカルリポジトリへのコミットが存在する。
GitHubサイト上でファイル編集するとリモートリポジトリへのコミットとなる。

ローカルPC上(Eclipse)でコミットするとローカルリポジトリへのコミットとなる。
ローカルリポジトリへコミットしたあと、リモートリポジトリに反映するため プッシュという作業が必要になる。


プルとは | pull

pullとは リモートリポジトリから変更履歴を ローカルリポジトリに取り込むことである。
pullを実行すると、リモートリポジトリに他のユーザーが変更を加えている場合、その変更箇所を取得し (フェッチ)、自分のローカルリポジトリに マージされる。

Eclipseでpullを実行する

Eclipseと連携している場合、pullは 以下のように実行する。
プロジェクト名を右クリック → Team → pull 


pullを実行するタイミング

他のユーザーがリモートリポジトリに変更を加えた可能性があるとき。


フェッチとは | feche

リモートリポジトリから変更箇所を取得する。
プルと似るが マージまでは行わない。

リモートリポジトリの変更箇所を確認するときに利用する。
フェッチのあと手動でマージすることにより、プルと同様な操作になる。

Eclipseでフェッチを実行する

プロジェクト名を右クリック → Team → Fetch from Upstream 


フェッチを活用するケース

変更箇所を目で一つ一つ確認しながら、慎重にマージしたいときに活用できる。


変更履歴のマージ

変更履歴のマージとは、他のユーザーが修正した内容を、自分の ローカルリポジトリに自動で統合する機能である。
このマージはフェッチ後に行う。

しかし、競合が発生した場合、自動的に統合できない。
この場合、手動で競合箇所を修正せねばならない。

Eclipseで変更履歴をマージする方法

フェッチの後に プロジェクト右クリック → Team → Merge



競合発生のタイミング

ローカルリポジトリコミット したファイルが、同時期に別ユーザーにより変更されてしまった時に、競合発生の条件が整う。(別ユーザーが先にコミットプッシュ

競合発生が現れるタイミングは、フェッチ後、リモートリポジトリとローカルリポジトリを マージする時である。
プルプッシュのタイミングでも競合は発生する。内部でマージを行っているからである。

下記の競合発生手順は、フェッチ→マージの操作で競合を発生させている。

競合が起こる手順

  1. ローカルリポジトリ側のファイルを修正してコミットする。
  2. リモートリポジトリ側のファイルを修正してコミットする。(別ユーザーによる修正を想定)
  3. ローカルリポジトリ側(Eclipse側)でフェッチを行う。
    フェッチを行った時点では競合は起こらず。
  4. 続いてマージを行う。
  5. マージ後のタイミングで競合が発生する。

プッシュとは | push

プッシュとは、ローカルリポジトリリモートリポジトリ(GitHubサーバー)へ反映させることである。

プッシュまでの基本的な流れ
  1. ファイルを編集する
  2. 編集情報をローカルリポジトリにコミット
  3. ローカルリポジトリをリモートリポジトリへプッシュ


インデックスへ追加 | add

ローカル環境におけるGitのファイル保存領域にはワークツリーとローカルリポジトリの他に、インデックスという領域がある。
インデックスはワークツリーとローカルリポジトリの中間に位置する領域である。

インデックスにはコミット予定のファイル情報を一時保管している。
コミットを実行するときインデックスのファイル情報をローカルリポジトリへ反映させる。

インデックスはステージという別の呼び方もある。


Eclipseで add 操作

Eclipseでは add index という操作を行う。
編集ファイルを右クリック → Team → Add to index

編集ファイルをインデックスにadd する手順

  1. 編集したり新規追加したファイルを右クリックする。
  2. Team → Add to index と操作する。
    以上で編集ファイルの情報がインデックスに追加される。
  3. インデックスに追加すると、プロジェクト名に「*」アイコンが付く。
    インデックスに追加したファイルには「+」アイコンが付く。
    コミットしたりインデックスから解除したりすると、これらのアイコンは消える。


インデックスの省略

通常、Eclipseではファイルを編集したらCommitする、という流れであることが多い。
しかし、内部ではインデックスに編集ファイル情報を追加し、そこからCommitされている。

わざわざインデックスに手動で追加する必要はないではないかと思えるが、利点もある。


インデックスへ add する利点

コミットすべき編集ファイルが多数存在する場合、直接Commitする方法だとコミットもれが出てくるかもしれない。
しかしaddは、1件ずつファイルをインデックスに貯めておいてから、切りの良いところで一気にコミットできる。
慎重にコミット作業を行う必要があるなら、add を使ったほうが良い。

また、他ユーザーが編集したファイルと競合が起きたときにも add の操作を使う。
競合を手動で修正したら、必ずaddを経由してCommitしなければならない。

間違えてインデックスに追加してしまったら

EclipseのPHPエクスプローラー上で簡単にインデックス追加を解除できる。
間違えてインデックスへ追加してしまったファイルを右クリックし、Team → Remove from index と選択する。


ワークツリーとは

通常のファイル修正場所である。
Eclipseで言えばPHPエクスプローラが該当する。


HEADとは

HEADは最新コミットを指している。

リポジトリは作業毎にコミットが蓄積されていく。
それらのコミットにはハッシュ値が付加されている。
最新コミットのハッシュ値がHEADと呼ばれている。

GitHubページ:最新コミットのハッシュ値がHEAD



ORIG_HEADとは

ORIG_HEADとは、前回、Resetを実施した時の、直前コミットを指す。
Resetで変更したが、やはり元に戻したいときにORIG_HEADを指定する。


FETCH_HEADとは

FETCH_HEADとは、最後にfetchしたときのコミットを指す。
他のユーザーが最後に修正した状態に戻したいときに指定する。

FETCH_HEAD自体はコミットのハッシュ値かと思われる。


Eclipseで ローカルリポジトリのコミット一覧を見る

操作手順
プロジェクト名を右クリック  → Team → Show in History





リベースとは | rebase

2つのブランチを統合するときに使う。
2つのコミットを1つに統合する。

コミット履歴を整理したいときに利用できる。

マージとの違い

リベース2つのコミットのうち片方のコミットにもう片方のコミットを合成する。
マージ2つのコミットを統合する際、新たにコミットを作成し、こちらに統合する。


参考リンク