私が今行っているGitチュートリアルでは、git commit
を使って行った変更を保存します。
git Push
はそのために何に使われていますか?
基本的にgit commit
" はリポジトリ "への変更を記録し、git Push
" は関連するオブジェクトと共にリモート参照を更新します "。そのため、最初のものはあなたのローカルリポジトリに関連して使われ、後者はリモートリポジトリと対話するために使われます。
これは Oliver Steele からのNice画像で、gitモデルとコマンドについて説明しています。
GitReady.com でgit Push
とgit pull
についてもっと読んでください(最初に参照した記事)。
commit :ローカルリポジトリに変更を加える
プッシュ :最後のコミットをリモートサーバーに転送します。
基本的に、git commitはあなたの変更をあなたのローカルレポジトリに入れますが、git Pushはあなたの変更をリモートの場所に送ります。
Gitは分散バージョン管理システムなので、違いはcommitはあなたのローカルリポジトリへの変更をコミットするのに対し、Pushはリモートリポジトリへのプッシュ変更をプッシュするということです。
git Push
は、あなたがローカルリポジトリに対して行ったコミットをリモートのコミットに追加するために使用されます - 一緒にgit pull
、それは人々が共同作業することを可能にします。
git commit
は local リポジトリへのあなたの変更を記録します。
あなたのローカルな変更を含むgit Push
update the remote リポジトリ。
コミット :{スナップショット|チェンジセット|歴史記録|バージョン|リポジトリの '名前を付けて保存'}。 Gitリポジトリ= のシリーズ(ツリー) をコミットします。
ローカル repository:あなたのマシン上のリポジトリ。
Remote repository:サーバー上のリポジトリ(例: Github.com )。
git commit
: local リポジトリに新しい commit (last commit + staged modification)を追加してください。
git Push
、git pull
: local リポジトリとそれに関連する remote リポジトリを同期させる。 Push
- local から remote への変更を適用し、pull
- remote から local への変更を適用します。
注意すべき3つのこと:
1) 作業ディレクトリ -----コードファイルが存在するフォルダ
2) ローカルリポジトリ ------これは私たちのシステムの内部にあります。初めてCOMMITコマンドを実行すると、このローカルリポジトリが作成されます。作業ディレクトリと同じ場所に
Checkit(.git)ファイルが作成されます。
その後、コミットするたびに、作業ディレクトリのファイルに行った変更がローカルリポジトリ(.git)に保存されます。
3) Remote Repository -----これは世界中のどこにあるサーバーのように私たちのシステムの外側にあります。 githubのように。 Pushコマンドを実行すると、ローカルリポジトリのコードがこのリモートリポジトリに格納されます。
以下の点を追加してください。
ローカルブランチで行われたコミットをリモートリポジトリにプッシュするためにgit Push
を使用するので、Yonはコミットするまでプッシュできません。
git Push
コマンドは2つの引数を取ります。
リモート名、例えばOrigin
ブランチ名、例えばmaster
例えば:
git Push <REMOTENAME> <BRANCHNAME>
git Push Origin master
非常に大雑把な例えとして、git commit
と編集済みファイルの保存を比較すると、git Push
はそのファイルを別の場所にコピーすることになります。
この類推をこの文脈から外さないでください - コミットしたりプッシュしたりすることは、編集したファイルを保存してコピーすることのようなものではありません。とは言っても、それは比較のためだけに成り立つべきです。
git commitは変更を正式に保存することに他なりません。コミットメッセージを送信するたびに、コミットが完了したらリモートにプッシュして変更をグローバルに確認できます。
これは、リモートにプッシュする前にたくさんのコミットを実行できることを意味します(コミットの一覧とメッセージも表示できます)。gitはコミットIDを40桁のコードで保存します。
私はリモートで私の変更を見たいと思ったときだけ私はgit Pushを使います(その後、私のコードがjenkinsで動くかどうかをチェックします)
Githubのリポジトリでログファイルが管理されていると想像するなら、gitコマンドadd
とcommit
の使い方を理解するのはより簡単です。私にとっての典型的なプロジェクトのログファイルは次のようになります。
---------------- Day 1 --------------------
Message: Completed Task A
Index of files changed: File1, File2
Message: Completed Task B
Index of files changed: File2, File3
-------------------------------------------
---------------- Day 2 --------------------
Message: Corrected typos
Index of files changed: File3, File1
-------------------------------------------
...
...
...and so on
私は通常git pull
リクエストで一日を始め、git Push
リクエストでそれを終わらせます。そのため、1日の記録内のすべてのものは、それらの間で発生したことに対応しています。毎日、いくつかのファイルを変更する必要がある 論理タスク があります。その作業中に編集されたファイルは索引にリストされます。
これらの各サブタスク(ここではタスクAとタスクB)は個々のコミットです。 git add
コマンドは、 'Index of Files Changed'リストにファイルを追加します。このプロセスはステージングとも呼ばれ、実際には変更されたファイルと実行された変更を記録します。 git commit
コマンドは、後で参照するために使用できるカスタムメッセージとともに、変更とそれに対応するインデックスリストを記録/確定します。
リポジトリのローカルコピーのみを変更しており、Github上のコピーは変更していないことに注意してください。これ以降は、git Push
を実行したときにのみ、コミットされたそれぞれのインデックスファイルとともに、これらの記録された変更すべてを実行し、(Githubの)メインリポジトリにログインします。
例として、架空のログファイルの2番目のエントリを取得するには、次のようにします。
git pull
# Make changes to File3 and File4
git add File3 File4
# Verify changes, run tests etc..
git commit -m 'Corrected typos'
git Push
一言で言えば、git add
とgit commit
はメインリポジトリへの変更を体系的な論理的なサブ変更に分割することを可能にします。他の答えやコメントが指摘しているように、もちろんそれらにはもっと多くの用途があります。しかし、これは最も一般的な使用法の1つであり、GitがSvnのような他の一般的なものとは異なり、多段階のリビジョン管理システムであることの背後にある駆動原理です。