Gitプル後の詳細変更


130

Gitのプル後、その出力は変更量の概要を示します。

各ファイルまたは一部のファイルの詳細な変更を確認するにはどうすればよいですか?

わかりました、これがJefromiへの私の質問です:

  1. マスターに引っ張っているのかどうしたら分かりますか?私がしたのは「git pull」だけです。

  2. masterは何を指し、Gitの2つのデフォルトヘッドであるmasterとHEADの違いは何ですか?

  3. 特定のファイルの詳細な変更を確認するにはどうすればよいですか?

  4. 前回の出力による要約出力の変化をgit pull再度確認するにはどうすればよいですか?

  5. 違いは何だgit diffとはgit whatchanged


4
さて、編集を介して新しい質問を繰り返し追加することは、システムの使用が意図されている方法とはまったく異なります。また、manページを見たり、何かを試してみるだけで、多くの質問に非常に簡単に答えることができます。たとえば、git diff明確にdiffをgit whatchanged出力する一方で、コミット情報のリストを明確に出力します。各コミット情報には、変更されたファイルのリストが含まれています。
カスカベル

おそらく担当者が低いためです。
TED

@TEDコメントを残すのに50担当者、投票するのに15担当者しかかかりません。
カスカベル

Ubuntuを搭載した私のラップトップでは、時々動作しますが動作しません。Centosを搭載した別のコンピューターを一時的に見つけて、このコメントを書いています。両方のコンピューターでFirefoxを使用しています。
Tim

非常に奇妙な。メタに行って、それが既知の問題であるかどうかを確認したり、報告したりすることができます。
カスカベル

回答:


204

あなたがマスターに引っ張っていると仮定します。あなたは、以前の位置を参照することができますmasterすることによってmaster@{1}(あるいはmaster@{10.minutes.ago};の指定リビジョンのセクションを参照のgit-REV-解析のmanページを)、あなたのようなことを行うことができますので、

  • すべての変更を確認します。 git diff master@{1} master

  • 特定のファイルへの変更を確認します。 git diff master@{1} master <file>

  • 特定のディレクトリ内のすべての変更を表示します。 git diff master@{1} master <dir>

  • 変更の概要をもう一度ご覧ください。 git diff --stat master@{1} master

「私がマスターであるかどうかはどうすればわかりますか」という質問については、ブランチの使用はGitワークフローの重要な部分です。自分がどのブランチにいるかを常に認識している必要があります-変​​更をプルした場合、それらを正しいブランチにプルしたいです!コマンドを使用すると、現在チェックアウトされているブランチの横にアスタリスクが付いたすべてのブランチのリストを表示できますgit branch。現在のブランチ名もの出力とともに出力されますgit status。使用するコマンドのマニュアルページをざっと読むことを強くお勧めします。これは、いくつかの知識をゆっくりと習得するのに最適な方法です。

そして最後の質問HEADは、現在チェックアウトされているブランチの名前です。あなたは、実際に使用することができるHEADHEAD@{1}同様に、この文脈では、それはあなたが行く場合以来、枝を使用して、別のブランチをチェックアウトして少しより堅牢です。HEAD今はその2番目のブランチであり、HEAD@{1}今ではmaster-欲しいものではありません!

このような小さな質問をたくさんする必要をなくすために、おそらくGitチュートリアルを見ておくべきでしょう。たとえば、ウェブ上には100万人がいます。


5
これは私の解決策よりも優れています:)
Christian Oudard

2
私はそれが他の方法で回避する必要があります...これは古いですけど、: git diff master@{1} master、すなわち挿入欠失などになってないと変更内容が示されている「後方」、
ultracrepidarian

2
git diff master@{1} master代わりに私のgit diff master~1 masterために仕事をしませんでした。
unrealsoul007

5
@ unrealsoul007その後、あなたの状況は異なっていました。master〜1は、現在マスターが指している1つのマスターの親コミットです。コミットだけの差分が表示されます。master @ {1}は、以前にポイントされたコミットマスターです。例えばあなたが引っ張っただけなら、それはここで説明するように引っ張る前のマスターの位置になります。それができなかった場合は、引っ張ってからおそらく別の方法で習得しているはずです。git reflog master何を理解してみてください。
カスカベル2015

@Jefromi fatal: ambiguous argument 'firstDesign@': unknown revision or path not in the working tree.このエラーが発生し続けます。git reflog firstDesignにはこの出力がありますが
unrealsoul007

52

次のようにgit pullを実行するとします。

$ git pull
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From git@dev.example.com:reponame
   a407564..9f52bed  branchname   -> origin/branchname
Updating a407564..9f52bed
Fast forward
 .../folder/filename          |  209 ++++++++-----
 .../folder2/filename2        |  120 +++++++++++---------
 2 files changed, 210 insertions(+), 119 deletions(-)

リビジョン番号を使用して、変更点の違いを確認できます。

$ git diff a407564..9f52bed

5
そして、あなたは、「使用して要約を得ることができますgit diff --stat a407564..9f52bed」または単に概要については、「git diff --summary a407564..9f52bed
ヤクブNarębski

14
新しいバージョンのgitでは、git pullは変更されたファイルのリストを出力しなくなりました。これを取得するには、 `git pull --stat 'を実行する必要があります
user10

6

1.マスターを取得しているかどうかはどうすればわかりますか?私がしたのは「git pull」だけです。

コマンド自体は次のように機能します。

git pull [options] [<repository> [<refspec>…]]

デフォルトでは、現在のブランチを指します。次を使用してブランチをチェックできます

git branch -a

これは、たとえば、ローカルとリモートのブランチをリストします(--- より明確にするために、ローカルとリモートの間にディバイダーとしてa を追加しました)

*master
foo
bar
baz
---
origin/HEAD -> origin/master
origin/deploy
origin/foo
origin/master
origin/bar
remote2/foo
remote2/baz

次に、1つのリモートリポジトリを見ると、参照しているものがわかります。

git remote show origin

次のようにリストされます:

* remote origin
  Fetch URL: ssh://git@git.example.com:12345/username/somerepo.git
  Push  URL: ssh://git@git.example.com:12345/username/somerepo.git
  HEAD branch: master
  Remote branches:
    foo    tracked
    master tracked
  Local refs configured for 'git push':
    foo    pushes to foo    (up to date)
    master pushes to master (fast-forwardable)

したがって、どこからプルしてどこにプッシュするかを確認するのは非常に簡単です。

3.特定のファイルの詳細な変更を確認するにはどうすればよいですか?

4.最後のgit pullによるサマリー出力の変更を再度確認するにはどうすればよいですか?

最も簡単でエレガントな方法(imo)は次のとおりです。

git diff --stat master@{1}..master --dirstat=cumulative,files

これにより、最後のプルと現在の作業状態の間の変化に関する2つの情報ブロックが得られます。出力例(わかりやすくするために-----stat--dirstat出力の間に除算としてas を追加しました):

 mu-plugins/media_att_count.php                     |  0
 mu-plugins/phpinfo.php                             |  0
 mu-plugins/template_debug.php                      |  0
 themes/dev/archive.php                             |  0
 themes/dev/category.php                            | 42 ++++++++++++++++++
 .../page_templates/foo_template.php                |  0
 themes/dev/style.css                               |  0
 themes/dev/tag.php                                 | 44 +++++++++++++++++++
 themes/dev/taxonomy-post_format.php                | 41 +++++++++++++++++
 themes/dev/template_parts/bar_template.php         |  0
 themes/someproject/template_wrappers/loop_foo.php  | 51 ++++++++++++++++++++++
---
 11 files changed, 178 insertions(+)
  71.3% themes/dev/
  28.6% themes/someproject/template_wrappers/
 100.0% themes/
  27.2% mu-plugins/
   9.0% themes/dev/page_templates/
   9.0% themes/dev/template_parts/
  63.6% themes/dev/
   9.0% themes/someproject/template_wrappers/
  72.7% themes/

2

この方法は一種のハックですが、gitkor gitgまたはorのようなグラフィカルツールを使用できますgit-gui

git pull
git reset HEAD@{1}
gitg (or gitk or whatever tool you like)

賛成票が最も多い答えはgitツールを使用する最良の方法ですが、GUIを使用してツールを利用して変更を確認できるため、この方法を使用します:P

その後、a git checkout .を実行してからgit pullもう一度実行するという追加の手順が必要になるため、適切にプルおよびマージできるようになりましたが、追加の2つの手順を処理するのに十分なGUIの違いを調べる機能を重視しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.