Linux応用コース10/11
【Gitの使い方②】git pushコマンド
こちらのシナリオは以下の続きとなります。 https://envader.plus/course/5/scenario/1055
今回はリポジトリをcloneしたりpushする流れを解説します。
git cloneコマンド
リポジトリを複製するためのコマンドです。GithHubからソースコードをコピーしたいときに使います。
末尾にディレクトリ名を指定すると、クローン先が指定できます。
git clone リポジトリのURL
git cloneのプロトコルと特徴
cloneするときのプロトコルは3つあります。特徴と合わせてご紹介します。
- httpまたはhttps
特徴
GitHubで推奨されており、GitHubのリポジトリをクローンする時によく使用します。通信速度が速く、基本はhttpsを使用してcloneします。
使用例
git clone https://github.com/user/hoge.git
- git
特徴
比較的通信速度が速く、読み取り専用。認証構造を持たないため、セキュリティは担保されません。
使用例
git clone git://example.com/user/hoge.git
- ssh
特徴
個人や社内プロジェクトで使用されており、秘密鍵の設定ができる。認証が必要になり通信は暗号化されるため、安全に使用できます。sshを省略した書き方も存在します。
使用例
git clone ssh://user@github.com:user/hoge.git
or
git clone user@github.com:user/hoge.git
git cloneの主なオプション
git clone
コマンドのオプションを下記の表にまとめました。
--branch/b | ブランチを指定してクローンする |
---|---|
--template | テンプレートディレクトリを作成 |
--bare | 作業ディレクトリを持たない |
--mirror | ローカルで同期する時に使う/ベアリポジトリが作成される |
--depth | 最新の履歴を取得 |
git pushコマンド
git push
コマンドはローカルリポジトリのコミット履歴をリモートリポジトリに送信して更新します。リモートリポジトリに自分の履歴がアップロードされて、変更履歴を共有することができます。
git push
コマンドを使用するには、ローカルリポジトリのコミット作成、リモートリポジトリの作成、ローカルリポジトリとリモートリポジトリの紐付けが必要になります。
ローカルリポジトリのコミットを作成する
pushする前にローカルリポジトリにコミットする必要があります。
git init リポジトリを作成
git add ファイル名 コミットの対象にする
git commit -m "コメント" コミットする
git init
やgit add
コマンドについては、別ページにて解説しています。
https://envader.plus/course/5/scenario/1055
git remoteコマンドでローカルリポジトリとリモートリポジトリの紐付けをする
次に、リモートリポジトリをGitHubで作成後、そのリモートリポジトリのURLをコピーして以下のコマンドを実行します。
git remote add コピーしたURL
git remote
コマンド は他のリポジトリとの接続を作成し、内容確認や削除が行えます。このコマンドを実行すると、リモートリポジトリの名前を表示できます。
git remote
# リモートリポジトリ名が表示される
origin
-vオプションを付けると、リモートリポジトリの名前と場所(url)を表示します。
# 例
git remote -v
origin git@github.com:user/hoge.git (fetch)
origin git@github.com:user/hoge.git (push)
git pushコマンドでリモートリポジトリのコミット履歴を更新する
ローカルリポジトリとリモートリポジトリとの接続が確認できたら、git push
コマンドでリモートリポジトリのコミット履歴を更新します。
実行するときは、ブランチを指定してpushします。
git push リポジトリ名 ローカルブランチ名:リモートブランチ名
例)
git push origin main:main
git push
コマンドを実行する時に、リポジトリ名を省略する方法も存在します。
リポジトリ名を省略するには、初めてローカルのブランチをリモートリポジトリにpushする時に、-u
オプションを付けてpushします。
git push -u origin
このコマンドを実行することで、以降のローカルからリモートへのpushの際には、リポジトリ名を省略することが可能になります。
git push
こうすることで、コマンドを叩く手間を減らすことができるため、コマンド入力の間違いを減らし、開発効率を上げることができます。
pushを取り消す方法(git reset)
間違えてpushしてしまった場合は、以下のコマンドでpushした直前の内容を削除できます。この場合、commit、add、ソースコードの変更を取り消すことができます。
git reset --hard HEAD^
ローカルのソースコードの変更は削除せずに、pushだけを取り消したい場合は以下のコマンドを実行します。
git reset --soft HEAD^
git reset
を使用した後、次に修正した内容をpushしようとした際に、以前のコミットとコンフリクトを起こしてエラーが発生してしまいます。
その場合、-f
オプションを付けることで強制的にpushすることができます。
git push -f origin
未pushを確認する方法(git logの使い方)
git logコマンドで、過去のコミットの内容などを確認することができます。以下のコマンドを実行することで、まだpushしていないコミットだけを表示することができます。
git log リポジトリ名/リモートのブランチ名..ローカルのブランチ名
リポジトリ名が初期設定でmainブランチにいる場合
git log origin/master..master
git pullコマンド
リモートリポジトリの全ブランチの変更内容を取得し、作業対象ブランチの変更内容を作業ディレクトリに反映します。
このコマンドはgit fetch
(リポジトリからコンテンツをダウンロードする)とgit merge
( git fetch
で取得した情報をブランチに取り込む)を同時に行っています。
git pull origin ブランチ名
git diffコマンド
変更を比較します。比較対象はファイルやブランチ、リポジトリなどさまざまあります。
git add
する前に変更した箇所とインデックスとの変更点を確認したい場合は、以下のコマンドを実行します。
git diff
以下のコマンドで、git pull
(リモートリポジトリの変更内容を取り込む)する前にリモートリポジトリと比較することができます。
git diff HEAD..リポジトリ名/ブランチ名
git push
する前にリモートリポジトリと比較する場合は以下のコマンドを実行します。
git diff リポジトリ名/ブランチ名..HEAD
差分があるファイルのパスだけを表示する場合にはこちらのコマンドを実行します。
git diff --name-only
今回コミットした変更点を表示する場合はこちらのコマンドを実行します。最新のコミットと、最新のコミットの一つ前との差分を表示することができます。
git diff HEAD^
コミット同士を比較したい場合は以下のコマンドを実行します。SHAとは、git log
コマンドなどで確認できる、一つのコミットに紐づいている2642b43
のようなハッシュ値のことです。
git diff 変更前SHA..変更後SHA
関連記事
GitHubの必須知識については、別の記事にて詳しく解説しています。
https://envader.plus/article/68
まとめ
リポジトリを複製するためのコマンド
git clone リポジトリのURL
ローカルの変更履歴をリモートに送信するためのコマンド
git push
ファイルやブランチ、リポジトリなどの変更を比較するコマンド
git diff
どのコマンドもGitを扱う上で大切なコマンドです。実際にコマンドを実行して、どのような挙動になるのかを確かめて理解を深めましょう。
問題を解くためには、十分な画面サイズのPC環境をご利用下さい。