2017-09-19 16 views

答えて

0

私はそれを行うためのハッキーな方法があります。

警告:以下のシングルライナーを使用する前に、すべてのコミットされていない変更をコミット/バックアップしてください。この単一のライナーは、変更を隠して復元しようとします。しかし、それはまだ以下のコードは、MERGE_COMMITに別のブランチで紹介他のファイルへの変更を除くFIRST_COMMITSECOND_COMMIT間の差分を示し

をレポでいくつかの混乱(新しいファイル)を導入することができるか、いくつかのバグが含まれていてもよいです。 env変数FIRST_COMMIT,SECOND_COMMIT、およびMERGE_COMMITを適切な値に設定する必要があります。

このシングルライナーは何
FIRST_COMMIT=866dfa2a7 
MERGE_COMMIT=94b195989 
SECOND_COMMIT=0fc856fd9 

git stash ; \ 
git checkout $FIRST_COMMIT ; \ 
git ls $MERGE_COMMIT..$SECOND_COMMIT | sort | \ 
uniq | \ 
xargs -L 1 git checkout $SECOND_COMMIT -- ; \ 
git difftool -d $FIRST_COMMIT ; \ 
git stash && git stash drop ; \ 
git stash apply 

  • FIRST_COMMIT
  • stash
  • チェックアウトコードの状態をgitのために地元のコミットされていない変更を置くには、すべてのファイルがMERGE_COMMITSECOND_COMMITに変更し、すべてのリビジョン取りそれらの間
  • 前のステップからのすべてのファイルは、の時刻にその状態にリセットされます
  • は、git用に設定した差分ツールを使用して差分を表示します。 diffはFIRST_COMMITSECOND_COMMITの間になりますが、MERGE_COMMITの別のブランチによって導入された他のファイルへの変更は除きます。前の文は、ファイルがSECOND_COMMITMERGE_COMMITの両方で変更された場合、すべての変更がdiffで表示されることを意味します。それを避けるのは難しいです。
  • diffツールを終了すると、gitは一時的な変更を削除し、作業しているブランチをチェックアウトします。
  • その後、git stashからの変更が適用されます。

ご希望のgitのワークフローに応じて、

上の単一ライナーからのgitのstash呼び出しを削除するように決定することができます
関連する問題