42

私はGitに少し慣れていませんが、私がやろうとしていることは可能であるように思われます。基本的に、私はリポジトリのクローンを処理していて、かなりの数のローカルコミットを行ってきました。すべての変更の「合計」と元のリポジトリバージョンの差分を確認する方法はありますか?Gitは基本的にこれを行うので、これは可能だと思いますpush

これが私がやろうとしていることの例です:gitkでは次のようなものが表示されます:
*-[mybranch] Answers.txtの最後に「42」を追加(ローカルコミット)
*-最後に「HelloWorld」を追加of my.txt(ローカルコミット)
*-my.txt(ローカルコミット)の先頭に「C#/。NET」を追加
*-<[RemoteRepo]>(クローン元の元のリポジトリ)

my.txtチェックアウトした元のバージョンとanswers.txt比較した場合のすべての変更の合計の違いをどのように確認できますRemoteRepoか?

4

6 に答える 6

63

3つの方法があります(ここで与えられた他の回答からの他の2つ)

1) git diff origin/master master
2) git diff origin/master..master
3) git diff origin/master...master

最初のものと2番目のものは同じであり、マスターとリモートマスターのヒント間の変化を示しています。

3つ目は、ブランチの最後のプッシュ以降にマスターで発生した変更を示しています。これが、探している最も適切な変更だと思います。

于 2011-04-20T18:53:19.967 に答える
16

最も準備ができている答えは

 git show-branch

より詳細に制御するためにできることは、git log付録を使用することgit rev-listです。

 git log --left-right --graph --cherry-pick \
      --oneline branchname...remote/branchname

これは私の好みの方法であり、次のような結果になります

> | fff6bda remote fix
< | c8903ee local fix
< |   724373c Merge branch 'bla' into bla
|\ \  
| < | 2faf547 details
| < | abbdc47 ....
|/ /  
< | befc181 some tagged commit

--decorateを含めると、gitk、git-gui、およびgitwebに近いものが得られます。

> | fff6bda remote fix
< | c8903ee local fix
< |   724373c (tag_4) Merge branch 'bla' into bla
|\ \  
| < | 2faf547 details
| < | abbdc47 ....
|/ /  
< | befc181 (tag_3) some tagged commit

プロのヒント1:便利な使用のために' 'を使用するgit config alias.lr log --long-option1 --long-option2

プロのヒント2:すぐに目を楽にするために''を使用するgit config color.ui auto

すべてのローカルヘッド(すべてのローカルブランチ上)とすべてのリモートコミット(同上ブランチ上)が必要な場合:

git log --decorate --pretty=oneline --all --not --glob=refs/remotes --no-walk

すべての個別の改訂を取得するには、ノーウォークを省略します。この場合、前に示したスイッチを使用することを好みます(--graph --left-right)

マージ

マージを明確に確認したい場合は、-boundaryを含めます

さまざまな高度なクエリ:

結果のフィルタリング

たくさんの狡猾なフィルタリング機能をGitlogしてサポートします。manページを参照してください。rev-list

--after '2001-01-01'
--until 'last week'
--author 'martin'
-E -i  --grep='fixes #[0123456789]+'
-S 'new_debug_function'

そして他の多くの。これにより、ほとんど労力をかけずに必要な情報を正確に取得するための十分なレバレッジが得られるはずです。

ローカルに隠されているものは何ですか?

隠し場所にあるがリモートにはないもの(隠し場所はreflogにあり、reflogは(リモートブランチの場合でも)常にローカル履歴を反映しているため、リモートブランチの隠し場所を参照する方法がないことに注意してください[1]):

git log $(git rev-list -g stash) --not --glob=refs/remotes 

すべての(その他の)到達不能なコミット...

ノート

  • 私のワークフローでは、これらはリベース/修正されたコミットとドロップされたスタッシュのみを構成します
  • また、履歴グラフのサイズによっては、これらの生成に時間がかかる場合があります
  • これにはドロップされたスタッシュが含まれますが、現在のスタッシュは含まれません

    git log $(git fsck --unreachable --full --lost-found | grep'commit' | cut -d'' -f3)\ --no-walk --not --glob = refs / remotes --oneline - 飾る

スクリプティング

スクリプトの目的で、の使用をgit logwithに置き換えるgit rev-listと、ハッシュだけが得られます(さらに、script-prrofの堅牢性が向上します)。

[1]リポジトリ間でスタッシュを転送する方法については、以前の回答も参照してください。

于 2011-04-20T18:32:11.390 に答える
13

(通常)あなたが望むことをする最も単純で確かに覚えやすいコマンドはこれです:

git diff origin

これは、最初にプルしたもの(原点)と作業中の現在のブランチ(デフォルトは。)の差分を示していますmaster

于 2011-08-22T02:08:39.713 に答える
5

違いはで表示できgit diff A B、AとBのコードを比較します。

git diff origin/master master

origin/masterは、リモートマスターブランチから最後にフェッチ(または複製)したときのリモートマスターブランチのmaster状態であり、ローカルで作業しているときにブランチを切り替えた場合を除き、コードのローカル状態です。

于 2011-04-20T18:43:36.580 に答える
3

すべてのgitdiffHEAD origin / "nameofyourbranch"

特定のファイルの場合gitdiffHEAD: "filename" origin / "nameofbranch": "filename"

于 2011-04-20T18:41:58.590 に答える
2
git diff origin/master..master
于 2011-04-20T18:44:29.337 に答える