web-dev-qa-db-ja.com

Git:追加vsプッシュvsコミット

Git addPush、およびcommitの違いは何ですか?

SVNから来る混乱が少しあります。ここで、「更新」は「追加」を行い、コミットは「プッシュ」を行い、「追加」も行います。

Gitにはさまざまな機能がすべてあります。あなたの経験から何らかの説明を期待しています。

102
CQM
  1. git addは、変更されたファイルをキューに追加し、後でコミットされるようにします。ファイルはコミットされません
  2. git commitは追加されたファイルをコミットし、ログで新しいリビジョンを作成します...ファイルを追加しない場合、gitは何もコミットしません。両方のアクションをgit commit -aと組み合わせることができます

  3. git Pushは、変更をリモートリポジトリにプッシュします。

this git cheat sheet のこの図は、ワークフローの良いアイデアを与えます

enter image description here

推奨されるコミット方法はgit addであるため、git commit -aは図にありませんが、フローを理解するためにgit addを変更ブロックに精神的に追加できます。

最後に、Pushが別個のコマンドである理由は、gitの哲学によるものです。 gitは分散バージョン管理システムであり、ローカル作業ディレクトリはリポジトリです!コミットしたすべての変更は即座に反映され、記録されます。 Pushは、作業中の作業が完了したときにリモートリポジトリ(他のユーザーと共有する場合があります)を更新するためにのみ使用されます。これは、変更をローカルで(ネットワークオーバーヘッドなしで)作業および保存し、コミットするたびにではなく、必要なときにのみ更新するための適切な方法です。これにより、間接的にコミット/分岐などが簡単になり(理由は違いますか?コストがかかりますか?)、リポジトリを混乱させることなく、より多くのセーブポイントにつながります。

147
abcd

git addは変更を選択します

git commitはローカルに変更を記録します

git Pushは変更を共有します

78
Dustin
  • git addはGitインデックスにファイルを追加します。Gitインデックスは、コミットする準備ができているオブジェクトのステージング領域です。
  • git commitはインデックス内のファイルをリポジトリにコミットします。git commit -aは、変更されたすべての追跡ファイルを最初にインデックスに追加するショートカットです。
  • git Pushは、ブランチがマップされているリモートリポジトリ(GitHubなど)に保留中のすべての変更を送信します。

Gitを理解するには、ドキュメントを一見するだけでなく、より多くの労力を費やす必要がありますが、間違いなく価値があります。ほとんどのGitコマンドには直接対応するものがないため、GitコマンドをSubversionに直接マップしようとしないでください。

22
Adam Byrtek

「追加」が実際に何をするのか、私は混乱していました。 Git Proという本から非常に啓発的なパラグラフを読みました。それはここで追加したいと思います。

「Gitは、git addコマンドを実行したときとまったく同じようにファイルをステージングすることがわかりました。コミットする場合、git addコマンドを最後に実行したときのベンチマークのバージョンは、コミットの実行方法であり、git commitの実行時に作業ディレクトリで表示されるファイルのバージョンではありません。 git addの実行後にファイルを変更した場合は、最新バージョンのファイルをステージングするためにgit addを再度実行する必要があります。

抜粋:チャコン、スコット。 「Pro Git。」Springer、2009-08-19T00:00:00 + 00:00。 iBooks。この素材は著作権で保護されている場合があります。

11
user2489252

addはgitにファイルの追跡を開始するよう指示します。

commitは、ローカルリポジトリ上の現在の変更をコミットします

プッシュは、ローカルリポジトリをアップストリームにプッシュします。

7
hvgotcodes

非常に素晴らしい pdf 多くのGITシークレットについて。

Addはsvnのaddと同じです(ファイルを解決済みとしてマークするために使用されることもあります)。

Commitもsvn'sと同じですが、ローカルリポジトリに変更をコミットします。

5
lord_t

この画像は非常に意味があります。

enter image description here

(from: Oliver Steele -My Git Workflow(2008)

2
Malick