「git commit」と「git push」の違いは何ですか?


895

Gitチュートリアルでは、行っgit commitた変更を保存するために使用されます。

git pushそれでは何が使われるのですか?


83
また、コンセプトの理解に大いに役立った「Gitチートシート」もご覧ください。ndpsoftware.com
cheatsheet.html

こちらが別のチートシートです:atlassian.com/git/tutorials/atlassian-git-cheatsheet
Kolob Canyon

2
すでに提供されているため、回答はありません。単なる観察。私には、コミットは本当に保存と呼ばれるべきであり、プッシュはコミットと呼ばれるべきです。古典的な命名シナリオの問題。
dublinx

回答:


1619

基本的にgit commitリポジトリへの変更を記録する」一方で、git push関連するオブジェクトとともにリモート参照を更新する」。したがって、前者はローカルリポジトリに関連して使用され、後者はリモートリポジトリとのやり取りに使用されます。

これはgitモデルとコマンドを説明するOliver Steeleの素敵な写真です:

Gitデータ転送コマンド

詳細読むgit pushgit pullGitReady.com(私が最初に参照記事)


20
これが元のソースです:osteele.com/archives/2008/05/my-git-workflowとgitワークフローの別の画像
tanascius

9
@ben githubは、パブリックな「オンザクラウド」リポジトリをホストするためのソリューションの1つにすぎませんgit push。実際には、の宛先は任意の gitリポジトリにgit pushすることができます。これは、別のディレクトリ(git remote add clone ~/proj/clone.git; git push clone masterまたはgit push ~/proj/clone.git masterなど)の独自のローカルハードドライブ、または独自のホストが提供するgitリポジトリに置くことができます。
サンタ

2
だから...最初にプッシュするか、最初にコミットする必要がありますか?
ココドコ2014

5
@Pietファイルを変更するワークスペースから始まります。次に、それらをインデックスに追加し、ローカルリポジトリにコミットし、最後に-リモートリポジトリにプッシュします
tanascius

2
@ Mr.Hydeいいえ、それは不可能です。分散バージョン管理としてのGitでは、ローカルコピーが必要です。
tanascius

215

commit:ローカルリポジトリへの変更の追加

push:最後のコミットをリモートサーバーに転送します


56

まあ、基本的にgit commitは変更をローカルリポジトリに入れますが、git pushは変更をリモートの場所に送信します。


9
今日はGITを使用して2日目です。上記の答えを見ても、まだはっきりとした画像が得られませんが、あなたの答えはそれを釘付けにしています。ありがとう。
ボファ2013年

1
DOESはgit push実際の更新されたファイルまたはいくつかの特別な「差分」ファイルをアップロード?
multigoodverse 2018

27

git pushローカルリポジトリで行ったコミットをリモートコミットに追加するために使用されます-とともに、git pull人々は共同作業を行うことができます。


26

gitは分散バージョン管理システムであるため、commitは変更をローカルリポジトリにコミットしますが、pushは変更をリモートリポジトリにプッシュします。


19

コミットスナップショット| チェンジセット| History_record | バージョン| リポジトリの「名前を付けて保存」。Gitリポジトリ=一連のコミット(ツリー)。

ローカルリポジトリ:コンピュータ上のリポジトリ。

リモートリポジトリ:サーバー上のリポジトリ(Github)。

git commit:新しいコミット(最後のコミット + 段階的な変更)をローカルリポジトリに追加します。(すべてのコミットはに保存されます/.git

git pushgit pullローカルリポジトリを関連するリモートリポジトリと 同期します。push-から変更を適用ローカルリモートpull-からの変更を適用し、リモートローカル


11

git commit変更をローカルリポジトリに記録します。

git push 更新リモートローカルの変更をリポジトリに。


20
あなたの答えは基本的にこの答えと同じです、それは何も新しいものを追加しません。

7

注意すべき3つのこと:

1)作業ディレクトリ -----コードファイルが存在するフォルダー

2)ローカルリポジトリ ------これはシステム内にあります。初めてCOMMITコマンドを実行すると、このローカルリポジトリが作成されます。作業ディレクトリと同じ場所に、
Checkit(.git)ファイルが作成されます。
その後、コミットすると、作業ディレクトリのファイルに加えた変更がローカルリポジトリ(.git)に保存されます。

3)リモートリポジトリ -----これは、世界中のどこにあるサーバーのように、システムの外部にあります。githubのように。PUSHコマンドを作成すると、ローカルリポジトリのコードがこのリモートリポジトリに保存されます


7

次の点を追加したいだけです:

git pushローカルブランチで行われたコミットをリモートリポジトリにプッシュするために使用するように、Yonはコミットするまでプッシュできません。

git pushコマンドには2つの引数を取ります。

リモート名。たとえば、origin ブランチ名。master

例えば:

git push  <REMOTENAME> <BRANCHNAME> 
git push  origin       master

4

非常に大雑把な例えとしてgit commit、編集したファイルの保存と比較すると、git pushそのファイルを別の場所にコピーすることになります。

この類推をこのコンテキストから外さないでください-コミットとプッシュは、編集されたファイルを保存してコピーすることとはまったく異なります。とはいえ、比較のために保持する必要があります。


1

gitコマンドの使用と、Githubのリポジトリでログファイルが維持されていると想像する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

私は通常、1日をgit pullリクエストで開始し、リクエストで終了しgit pushます。したがって、1日のレコード内のすべてが、それらの間で発生することに対応します。毎日、いくつかのファイルを変更する必要がある、1つ以上の論理的なタスクが完了しています。そのタスク中に編集されたファイルは、インデックスにリストされます。

これらの各サブタスク(ここではタスクAとタスクB)は個別のコミットです。このgit addコマンドは、「変更されたファイルのインデックス」リストにファイルを追加します。このプロセスはステージングとも呼ばれ、実際には変更されたファイルと実行された変更が記録されます。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 addgit commit、メインリポジトリへの変更を体系的な論理サブ変更に分解できます。他の回答やコメントが指摘しているように、もちろんそれらにはもっと多くの用途があります。ただし、これは最も一般的な使用法の1つであり、Svnのような他の一般的なものとは異なり、Gitが多段階のリビジョン管理システムであることの背後にある推進原則です。


0

git commitは変更を正式に保存することに他なりません。すべてのコミットに対してコミットメッセージを提供します。コミットが完了したら、リモートにプッシュして変更をグローバルに確認できます。

これは、リモートにプッシュする前に多数のコミットを実行できることを意味します(発生したコミットのリストとメッセージも確認できます)gitは、40桁のコードであるコミットIDで各コミットを保存します

そして、リモートで変更を確認したいときにのみgit pushを使用します(その後、コードがjenkinsで機能するかどうかを確認します)


-1

まあ、基本的にgit commitは変更をローカルリポジトリに入れますが、git pushは変更をリモートの場所に送信します。gitは分散バージョン管理システムなので、commitは変更をローカルリポジトリにコミットしますが、pushは変更をリモートリポジトリにプッシュします。

ソースGoogle

http://gitref.org/basic/このリンクも非常に役立ちます

https://git-scm.com/docs/git-commit


この答えは、単語ごとに他の答えを1つにコピーします。
Jeffery Opoku-Mensah 2017年

これまでに言われてきたことすべてに新しいものをもたらすことはありません...
hublo

-1

素人の言葉で言えば、githubにファイルを正常にgitするためにそれらを実行するgit commit前のステップgit pushです。


-2

git commitローカルリポジトリにステージングされたファイルをコミットします。git pushローカル側のマスターブランチをリモートマスターブランチと早送りでマージします。しかし、マージは常に成功するとは限りません。拒否が表示さpullれた場合は、成功させるためにする必要がありますgit push


一部の人々は、プルではなくプッシュを強制したい場合があります。状況によります。あなたが(でもリモートレポに)他の人と共有していないことをブランチにリベース後コミットをしている場合、実際には、それから引っ張っは確かにありませんあなたが何をしたいのか。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.