問題タブ [git-diff]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - git-diff:コミットのためにステージングされた変更のみを表示
commit()に追加したファイルの差分を確認したいgit add something
。私がすることができます:
もっと短い方法はありますか?
git - 「gitdiff」からファイルを除外したい
db/irrelevant.php
Git差分からファイル()を除外しようとしています。その行でdb
呼ばれるサブディレクトリにファイルを入れてみました。また、を含む
という名前のファイルを作成してみました。.gitattributes
irrelevant.php -diff
.git/info/attributes
db/irrelevant.php
いずれの場合も、db/irrelevant.php
ファイルはGitバイナリパッチとしてdiffに含まれています。私が欲しいのは、そのファイルへの変更がdiffコマンドによって無視されることです。私は何が間違っているのですか?
git-diff - 実際には変更されていないのに、Git がファイルを変更済みとして表示するのはいつですか?
の出力はgit diff
、1 つの my ファイルの完全な内容が削除されてから追加されたことを示しています。どうしてこれなの?
git - gitdiff--statに完全なファイルパスを表示させる
実行git diff --stat
すると、一部のファイルはリポジトリベースからのフルパスで一覧表示されますが、一部のファイルは次のように一覧表示されます。
つまり、パスはで始まり、...
短いパスのみが表示されます。
git diff
スクリプトで簡単に処理できるように、すべてのファイルの完全なファイルパスをリストしたいと思います。git diff
常にフルパスを表示する方法はありますか
git - Git Diffを1つ以上の関数に制限しますか?
で設定*.py diff=python
しました.git/info/attributes
。したがって、Gitは関数の境界がどこにあるかを知っています。git diff -Wは、関数全体が表示されていることを確認することもできます。
しかし、git diffの出力を特定の関数だけ(または複数)に制限する方法はありますか?
(それが失敗した場合、それはひどいことだと思います...)
編集これは次の場合にも役立ちます:views.pyを変更するすべてのコミットを表示しないでください。その中の特定の関数を変更するコミットを表示してくださいgit log
。git rev-list
(はい、理想的な世界では、views.pyは8人の異なる開発者によって頻繁に変更される2000行の巨大なものではありません...)
python - ファイルから単一の Python 関数を選択する Bash スクリプト
git alias problemの場合、ファイルから単一の Python 関数を名前で選択できるようにしたいと考えています。例えば:
アルゴリズム的に言えば、以下は十分に近いものです。
- 一致する行が見つかったら、フィルタリングを開始します
/^(\s*)def $1[^a-zA-Z0-9]/
- orではない 行(つまり、インデントされている可能性のあるコメント、または前のものよりも長いインデント)が見つかるまで、一致を続けます。
^\s*#
^/\1\s]
(次の関数の前のデコレータが取り上げられても、あまり気にしません。結果は、人間が読むためのものです。)
私はこれをAwk(ほとんど知らない)でやろうとしていましたが、思ったより少し難しいです。手始めに、元の の前にインデントの長さを保存する方法が必要def
です。
git - 既存の git リポジトリに追加する未修正コードの適切な親コミットを見つける
以前はバージョン管理下になかったいくつかのコードを、既にいくつかのコミットを含む git リポジトリに含める必要があります。
私が自動化したいのは、新しいコードが子コミットになる適切な「親」コミットを見つけることです。
いくつかのテストの後、私は最もうまくいくと思いますgit diff-tree
(「親子関係」のテストに関連するコードが1つのフォルダーにしか含まれていないため)。
私のアプローチは次のようなものです:
- 既存のすべてのコミットと、コミットのノード sha1 および関連するサブツリーの sha1 をループします。
- 新しいファイルをリポジトリにコピーし、インデックスに追加します
- インデックス内の関連するサブツリーの sha1 に注意してください
- 既存の関連するサブツリーを新しい候補と比較し、似たものの git diff-tree を使用して「類似度」を計算します
- 最も類似した既存のサブツリーを選択し、それを新しいコミットの親にコミットします。つまり、新しい親をチェックアウトし (または
checkout --orphan
、適切な親が見つからない場合)、作業ディレクトリを空にし、新しいファイルで埋めてコミットします。
欠けているのは、類似性を計算する方法です! 誰かがフラグの組み合わせが役立つヒントを教えてくれるかもしれません...
それが重要な場合、コードはほとんど PASCAL のように見えます。
git - 冗長な作業を回避するよりスマートなリベース?
長いリベースで遭遇する問題の1つは、冗長な競合を解決する必要があることです。関数を変更し続ける一連のコミットを持つブランチがあり、最後のコミットで関数が完全に削除されたとします。
私がそうするときrebase master
、Gitは各コミットを順番に素朴に適用します。つまり、最終的にはその作業が無駄になったとしても、マスターのヒントを使ってこれらの各コミットを解決する必要があります。
この状況に対処するための良い方法は何ですか?おそらく、ブランチ全体に対して単一のパッチを生成し、それをマスターに対して適用する必要がありますか?もしそうなら、いくつかの歴史を保存する方法はありますか?考え、提案など。
git - ローカル ブランチとリモート ブランチ間で指定されたファイルの違いを確認するにはどうすればよいですか?
ローカル ブランチとリモート ブランチの指定ファイルの違いを確認するにはどうすればよいですか?
私はこのコマンドを知っています:
しかし、指定された1つのファイルの変更のみを気にしながら、2つのブランチ間のすべてのファイルの違いを示します。
git - ステージングされたファイルとスタッシュ内のファイルの差分
git stash からファイルを比較するための --staged (別名 --cached) オプションはありますか?
ここでは、最新のコミットをステージングされたファイルと比較しています (明示的な @{} 構文を使用していますが、@{0} を推測できることはわかっています)。
ここでは、隠しファイルとディスク上のファイルを比較しています。
現在ステージングされているものと隠し場所にあるものを比較するにはどうすればよいですか? これは機能しません: