0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【初心者向け】GitHubで構成管理を行う際の一連の流れ

Posted at

1.初期設定

構成管理を行う上で一番最初にやるべきことを整理する。ここでやることは基本的に一度だけしかやらないことが多い。
まずはGitHubにユーザ登録を行った後に、次にローカルのコマンドラインから下記のコードを打ち込み、GitHubの初期設定を行う。

$ git config --global user.name "GitHubに登録したユーザー名"
$ git config --global user.email GitHubに登録しているメールアドレス

続いて、リモートリポジトリをGitHub上で作成する。ローカルリポジトリを既に作成済みであれば、ローカルリポジトリと同じ名称でリモートリポジトリを作成する。ローカルリポジトリも未作成である場合は、下記コードをコマンドラインに打ち込むことで、作業中のワークツリー(フォルダやその中にあるファイル)からローカルリポジトリを新規作成できる。

$ git init 

*$ git initはローカルリポジトリが未作成である場合は新規作成を行い、既に作成済みである場合は初期化を行うコマンドで、gitの管理対象とするためのコマンド

続いて、作成したリモートリポジトリを登録する。

$ git remote add origin リモートリポジトリのURL

*git remote add origin URLとすることで、URLで指定したモートリポジトリをoriginという名前で参照できるようになる。

次に、リモートリポジトリにあるファイルやフォルダを丸ごとローカルへコピーするためにgit cloneを実行する。git cloneを実行するとカレントディレクトリにフォルダが新規に作成される。

$ git clone リモートリポジトリのURL

2.リモートリポジトリのコミット内容をローカルへ反映させる

ここではリモートリポジトリ上にある最新のコミット内容をローカルリポジトリへ反映させて、その続きから開発を行う場合を想定した手順を整理する。リモートリポジトリの最新の内容がローカルに反映されている場合や、まだ開発ディレクトリ内で作業をしたい場合はこの章の内容を飛ばして3章へ進む。

git fetch

他の開発メンバーによるアップデートがあったか確認をするにはgit fetchを行う。git fetchはリモートリポジトリのコミット履歴を取得し、ローカルリポジトリのコミット履歴を更新する。更新するだけで、開発中のファイルは上書きされない。

$ git fetch リモート名

git merge

git fetchのコミット履歴の内容を確認したら、git mergeを行い、ローカルで作業中のファイルを更新する。マージ処理は同一ファイルに行われた変更を統合する処理と、コミットに含まれるファイル全体を統合する処理を行う。この際、どのブランチにマージするかが大事なので、マージを実行したいブランチへ移動する。

#どのブランチにいるか確認
$ git branch

#マージしたいブランチへ移動
$ git switch ブランチ名

マージを実行したいブランチへ移動できたらマージを実行する。

$ git merge マージするブランチ名

この際、同じファイルの同じ行に別の変更があった場合は、コンフリクトが発生しマージ処理が一時中断される。どちらのブランチを採用するかはgitでは判断できないため、開発者でこの問題を解決する必要がある。

まずはgit statusコマンドを実行し、マージ処理に失敗したファイルを確認し、手作業でファイルの修正を行う。次に、git addコマンドを修正したファイルをインデックスに追加する。この作業をコンフリクトが解消するまで行う。

#ディレクトリ内のファイルの状況を確認
$ git status

#修正したファイルをインデックスへ追加
$ git add 修正したファイル名

git pull

git pullはリモートリポジトリの更新情報を取得してきて、現在のブランチへマージするコマンドである。いわば、git pullgit fetchgit mergeを同時に行う処理である。そのため、マージ処理と同様に、コマンドを実行する時のブランチを確認しておくことと、コンフリクトが発生する可能性があることを念頭に入れる必要がある。

git pullgit fetch + git mergeの使い分けはmainブランチにいるときはpull、mainからブランチを切って作業している時はfetch+mergeを行うと良い。

$ git pull リモート名 ブランチ名

3.ローカルで作業を行い、リモートリポジトリへ反映させる

ブランチを作成する

ブランチとは複数人で共有リポジトリを用いて開発を行う際に、それぞれ枝分かれしつつも独立して開発できるようにするための機能である。各々の開発メンバーはメインブランチから各自ブランチを切って開発を行い、開発が完了したらメインブランチへ自分の変更内容を取り込んでいく。

まずは自身で開発を行うためのブランチを作成し、そのブランチへ移動する。

ブランチを作成
$ git branch ブランチ名

ブランチを切り替える
$ git switch ブランチ名

ブランチを新規作成して切り替える
$ git switch -c ブランチ名

git addとgit commit

ローカルで作業し、その成果をリモートリポジトリへ反映させるための事前準備として、ローカルリポジトリへ更新履歴をコミットする必要がある。作業フォルダからローカルリポジトリへ直接コミットするのではなく、インデックスにファイルを登録する必要がある。

#作業ディレクトリからインデックスへコミット対象となるファイルを追加
$ git add ファイル名
$ git add . (全ファイルを追加)

#インデックスに登録したファイルをローカルリポジトリへコミット
$ git commit -m "コミットメッセージ"

変更内容を確認する

git addやgit commitを実行する前に、変更内容を確認したい時に使うコマンドがgit diffgit statusコマンドである。git diffは変更内容の確認、git statusは変更ファイルを確認する為に行う。

#リポジトリとディレクトリの変更内容を確認
$ git diff

#リポジトリとインデックスの差分を確認
$ git diff -staged

#ディレクトリとインデックス間の変更ファイルを確認
$ git status

ローカルリポジトリの変更履歴を確認する時はgit logコマンドを実行する。

$ git log

変更内容を修正する

変更内容を修正する時はgit restoreコマンドを実行する。

#ディレクトリのファイルの変更をリポジトリの内容に戻す
$ git restore ファイル名

#インデックスに上げた変更を元に戻す
$ git restore -staged 元に戻したいファイル名

リモートリポジトリへpushする

ローカルリポジトリへのコミットや変更内容の確認が出来たら、いよいよリモートリポジトリへ反映させていく。

$ git push origin main

originはgit remote addで設定したリモートリポジトリ、mainはpushするブランチ名を入力する。

続いてプルリクエスストをGitHub上で行う。pushされた内容を元にGitHubでプルリクエストを作成し、自身のコードレビュワーなどに確認をしてもらい、問題がなければマージする。

参考

・Git の基礎勉強 〜Git によるバージョン管理を使う〜
https://tracpath.com/bootcamp/learning_git_firststep.html

・git fetch, git pull, git cloneは何が違うのか?使い方を実例で解説|Githubのリモートレポジトリからデータや最新のコミットを取得する方法(クローン、フェッチ、プルの違い)
https://prograshi.com/general/git/difference-of-git-clone-fetch-pull/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?