我可以在git中合并文件吗?

时间:2012-07-19 06:17:51

标签: git github

git-repository中有三个文件Shell-ijk-ArrayList.javaShell-ijk-Vektor.javaShell-ikj-ArrayList.java。我已将它们“手动合并”到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移动它,但对于过时的文件来说什么是好文件夹?

3 个答案:

答案 0 :(得分: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: How to search for a deleted file in the project commit history?

Find and restore a deleted file in a Git repository

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

git rm不会丢失这些文件的历史记录:请参阅“Querying deleted content in 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文件中。