我能否在 Git 中合并文件?

8
我有三个文件Shell-ijk-ArrayList.java,Shell-ijk-Vektor.javaShell-ikj-ArrayList.java,这些文件都在git-repository中。我已经手动将它们合并为 MatrixMultiplication.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来移动它,但是哪个文件夹适合存放过时的文件呢?


以什么方式合并它们?这些文件看起来彼此非常不同。 - Ryan Bigg
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存储库中查找和恢复已删除的文件


非常感谢。你知道在 subversion 中历史记录是否丢失了吗?(顺便说一下,博客写得很好) - Martin Thoma
https://dev59.com/5HRB5IYBdhLWcg3w1Khe - Jacob Midtgaard-Olesen

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文件。

1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接