8

3 つのファイルShell-ijk-ArrayList.javaShell-ijk-Vektor.javaありShell-ikj-ArrayList.java、このgit-repository にあります。に手動で「マージ」しましたMatrixMultiplication.java。残りの 3 つを削除したいと思いますが、それらの履歴は保持したいと考えています。これを行う最善の方法は何ですか?

git merge-fileを見つけましたが、試してみると

git merge-file MatrixMultiplication.java Shell-ijk-ArrayList.java Shell-ijk-Vektor.java 

私は得る

error: Could not stat MatrixMultiplication.java

で古いファイルを簡単に削除できますgit rmが、そうすると履歴が失われますね。

で移動することもできgit mvますが、古いファイルを保存するのに適したフォルダーは何ですか?

4

3 に答える 3

2

別々のロジックを持つ異なるファイルを 1 つのファイルにマージしているように見えますか? それは git merge-file の目的ではありません。

git help merge-fileから:

git merge-file incorporates all changes that lead from the <base-file> to 
<other-file>  into <current-file>. The result ordinarily goes into 
<current-file>. 

git merge-file is useful for combining separate changes to an original. 
Suppose <base-file> is the original, and both <current-file> and <other-file> 
are modifications of <base-file>, then git merge-file combines both changes.

例 (これもヘルプ ページから):

 git merge-file README.my README README.upstream
       combines the changes of README.my and README.upstream since README, 
       tries to merge them and writes the result into README.my.

完全に別々のファイルのロジックを 1 つに結合するには、それらを手動で結合するのが正しいです。

ファイルを削除しても履歴は削除されません。削除されたファイルのログは次の方法で確認できます。

git log -- <path_to_file>

関連する Q/A を参照してください:

Git:プロジェクトのコミット履歴で削除されたファイルを検索するには?

Git リポジトリで削除されたファイルを見つけて復元する

于 2012-07-19T06:42:30.567 に答える
1

gitmerge-fileが必要なものかどうかはわかりません。これは、コードのリファクタリング/シャッフルのように聞こえます。

git rmは履歴を保持し、非遡及的です。以前のバージョンに戻すと、そこに表示されます。私が行って古いチェックインをチェックするとき、私が「gitrm」したファイルはまだ完全な履歴でそこにあります。

于 2012-07-19T06:27:41.580 に答える
1

git rmこれらのファイルの履歴が失われることはありません。「gitで削除されたコンテンツのクエリ」を参照してください。

そのファイルのコミット履歴を表示するには、通常の方法では実行できません。

$ git log file2
fatal: ambiguous argument 'file2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

代わりに、これを行う必要があります。

$ git log -- file2

についてはgit-merge-file、空のファイルに適用してみてください。ただし、インデックスMatrixMultiplication.javaファイルに追加されます。

于 2012-07-19T06:31:54.007 に答える