記事を書こうと思った背景
業務でgitLabを使う機会があったのですが、チームで使用したことはなく、マージやコンフリクトを実際に手を動かして勉強したいという意思でこの記事を書きます。また、githubを勉強しようと思ったのはkaggleコンペチームでgithubを紹介してほしいということでしたので挑戦します。
github初心者が実際に使用できるレベル感で記事をまとめます(使用はできるけどコマンドの説明は触れないので調べていただけると幸いです)。
また、githubの環境がすでに構築されている方向けの記事となります(コマンド実行はgit bashを使用します)。
githubのインストール、vimの使い方については省略させていただきます。
知見のある方で、誤りや認識違いがありましたらご指摘いただけると幸いです。
現在の自身のレベル感として、
- リポジトリなどgithubの概念は理解はできている
- 一人での作業(以下のコマンドなど)であれば問題なく使用できる(コマンドを調べれば・・・)
現在、Githubで使用できるコマンドは以下です。
- git init
- git add
- git commit
- git push
今回使用した環境は以下です。
- windows10
- git version 2.16.2.windows.1
- webブラウザ: Chrome 91.0.4472.77(Official Build) (64 ビット)
- vim
目次
- githubで管理するディレクトリを作成
- githubで管理するファイルを作成、
$git add
を実行($git status
) - commitを行う(
$git commit
) - githubでリポジトリを作成
- 作成したファイルをgithub上に公開する(
$git branch
,$git remote add...
,$git push
) - ブランチを切る(
$git checkout
) - マージする際にコンフリクトを起こす(
$git merge
)※失敗 - コンフリクトを解消する(
$git reset
)※使用方法、注意
githubで管理するディレクトリを作成
まず、自分が作成したいフォルダに移動して、githubで管理するディレクトリを作成します。
$ mkdir <ディレクトリの名前を指定>
その後、作成したディレクトリ内で$git init
を実行します。
エクスプローラでフォルダ内を確認すると、.git
ファイルが作成されます。
また、git bush上で$ls -a
を使用すると.git
が作成されていることを確認できます(色が見えづらいのは申し訳ないです)。
githubで管理するファイルを作成、$git add
を実行($git status
)
ここではgit bash上でvim
を使用して、githubで管理するテキストファイルを作成します。
$cat
を使用して作成したテキストファイルを確認します。
ここではhellow github!
というテキストを記載しています。
ここで、$git status
を使用して、直近のコミットからの変更を確認してみます。
先ほど作成したsample.txt
が赤文字で表示されています。
このファイルはまだgithub上で管理されていないことを示しています。
sample.txt
を$git add
すると、以下のようにステージングされたことが分かります。
sample.txt
が緑色で表示されていることがわかります。この状態でcommitする準備が整いました。
commitを行う($git commit
)
以下のように$git commit
を使用してcommitを実行します。
また、$git status
で変更履歴がどうなったかも確認しています。
githubでリポジトリを作成
webブラウザ上でgithubのページを開き、リポジトリを作成します。
赤く囲んだ+
のところで「New repository」を選択し、以下の内容でリポジトリを作成します。
作成したファイルをgithub上に公開する($git branch
, $git remote add...
, $git push
)
github上でリポジトリが作成できると、以下のような画面が表示されます。
今回は$git commit
までを実行したので、ブランチmain
を作成し$git push
を行います。
webブラウザに戻って作成したリポジトリを確認すると、先ほど作成したsample.txt
がgitnub上に表示されます。
ブランチを切る($git checkout
)
$git branch
を使用して、現在のブランチを確認します。
その後、test
という名前のブランチを作成し、そこに移動します。
実行した結果は以下です。
ここで、以下のコマンドを使用して、testブランチにtest.txt
をコミットしてみます。
webブラウザ上で
ことを確認できると思います。
マージする際にコンフリクトを起こす($git merge
)※失敗
まず、コンフリクトを起こすために、testブランチでsample.txt
を編集します。
sample.txt
の中身を、hellow github! から hellow world! に変更してgithubにコミットしました。
次にmainブランチでsample.txt
を編集してgithubにコミットしました。
sample.txt
の中身を hello github! から helow Japan! に変更しました。
そして、コンフリクトを発生させたいと思います。
testブランチに移動して、$git merge
を実行してみます。すると以下のようにコンフリクトを起こしていることが確認できると思います(初コンフリクト体験中です)。
コンフリクトを解消する($git reset
)※使用方法、注意
今回はmainブランチとtestブランチのsample.txt
を同時に変更しました。
そのため、マージしようとするとコンフリクトが発生してしまい、失敗してしまいます。
そこで、testブランチの変更をmainブランチに反映したいと思います。
vim
(エディタでも可)でsample.txt
を開きます。すると、以下のようなファイル内容になっていることがわかります。
上のgit bash から以下のテキストを削除します。
- <<<<<<< HEAD
- =======
- hellow Japan!
-
main
testブランチのsample.txt
は以下のように編集できました。
その後、commitを行いますが、失敗してしまいました。どうやらマージする前にpushしてしまったのが原因でした。
これは業務で行ってしまうと怒られてしまいますね(まずっ)。
この問題を解決していきます(解決方法はあまりよくない例です、おそらく)。
$git log
で変更履歴を確認します。以下のようになっているため、直前のコミットHEADを削除します。
先ほどのミスをしたコミットを削除することができたのを確認できます。
testブランチでsample.txt
の中身を、hellow github! から hellow world! に変更します。
$git add'と'$git commit
まで行います($git push
はまだしません)。
この後、mainブランチに移動して、testブランチ同様、直前のコミットを削除します。
そしてsample.txt
の中身を hello github! から helow Japan! に変更します。
ここでもtestブランチ同様、$git add'と'$git commit
まで行います($git push
はまだしません)。
これで一応問題解決です(手段はおそらく良くないです、正しい記事を参照してください)。
参考文献
最後に
今回はここまでで勉強をいったん終了します(マージができなかったですが・・・心が折れました)。
知見のある方で、誤りを見つけた際はご報告いただけると幸いです。
念のため
今回使用したgithubのリポジトリです。