8

我有三个文件Shell-ijk-ArrayList.java,在这个git-repositoryShell-ijk-Vektor.java中。我已将它们手动“合并”到. 现在我想摆脱其他三个,但我想保留他们的历史。做这个的最好方式是什么?Shell-ikj-ArrayList.javaMatrixMultiplication.java

我找到了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

在我看来,您正在将具有不同逻辑的不同文件合并到一个文件中?这不是 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.

要将完全独立的文件中的逻辑合并为一个,手动合并它们是正确的。

删除文件不会删除其历史记录,您可以通过以下方式查看已删除文件的日志:

git log -- <path_to_file>

请参阅相关问答:

Git:如何在项目提交历史中搜索已删除的文件?

在 Git 存储库中查找和恢复已删除的文件

于 2012-07-19T06:42:30.567 回答
1

我不确定 git merge-file 是你需要的。这听起来更像是代码重构/改组。

git rm 保留历史记录,并且不可追溯。如果您恢复到以前的版本,它们将在那里。当我去检查我的旧签入时,我“git rm”d 的文件仍然存在,并且具有完整的历史记录。

于 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 回答