1. ホーム
  2. コース一覧
  3. Linux応用コース
  4. 【Gitの使い方②】git pushコマンド

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 initgit 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環境をご利用下さい。