我git-repository中有三个文件Shell-ijk-ArrayList.java
,Shell-ijk-Vektor.java
和Shell-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
移动它,但对于过时的文件来说什么是好文件夹?
答案 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?
答案 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
文件中。