Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用git将两个文件合并为一个文件_Git_Github_Merge_Repository_Git Merge - Fatal编程技术网

使用git将两个文件合并为一个文件

使用git将两个文件合并为一个文件,git,github,merge,repository,git-merge,Git,Github,Merge,Repository,Git Merge,我有一个文件夹A_文件夹。在该文件夹中有一个文件和一个文件.html。该文件夹位于我的存储库的分支中。我还有一个branch\u b,它有文件b\u file.html。 如何将A_File.html和B_File.html合并在一起,以将最终代码保存在A_File.html中?您使用了一个技术术语“合并”,但它并不适用 你可能会想到一般(非Git)动词merge,意思是合并。如果是这样的话,实现这一点的方法很简单:从您希望合并为单个文件的两个文件中获取数据,然后将其合并为单个文件 Git的合并

我有一个文件夹
A_文件夹
。在该文件夹中有一个文件
和一个文件.html
。该文件夹位于我的存储库的分支中。我还有一个
branch\u b
,它有文件
b\u file.html

如何将
A_File.html
B_File.html
合并在一起,以将最终代码保存在
A_File.html
中?

您使用了一个技术术语“合并”,但它并不适用

你可能会想到一般(非Git)动词merge,意思是合并。如果是这样的话,实现这一点的方法很简单:从您希望合并为单个文件的两个文件中获取数据,然后将其合并为单个文件

Git的合并理念 要合并的动词的Git形式通常应用于整个提交,而不是文件。也就是说,我们运行:

git checkout argument-1
git merge argument-2
这里的两个参数,
argument-1
argument-2
标识提交(有时通过分支名称,但分支名称并不重要)。在Git中,提交是一个包含两个内容的实体:

  • 所有文件的快照,以及
  • 一些元数据
Git中的合并过程使用两个指定的提交来定位第三个提交,该提交还包含所有文件的快照。然后,合并过程对这三个输入起作用

如果要合并三个输入,且三个输入为文件,则可以使用
git merge file
。Git应用于三个输入提交的合并过程包括对来自三个提交的文件运行
Git merge file
。(在此之前,合并过程必须以正确的方式将文件分组在一起,以便每个
git merge file
合并正确的三个文件;因为您不关心这一部分,所以这里不讨论这一点。)

你的合并方式 在您的情况下,听起来您只有两个输入,而不是三个。所以Git的合并不是你感兴趣的。因此,您不应该使用Git来完成合并

我有一个文件夹
A_文件夹
在那个文件夹里有一个文件
A_文件.html
那个文件夹在我的repo中的
branch_A
里面

从技术上讲,名称
branch_A
标识一个特定的提交。要访问整个提交并使其成为当前提交,只需运行:

git checkout branch_A
git checkout branch_b
现在,
branch\u A
上的最后一次提交中的所有文件都在您的工作树中,您可以对其执行任何操作

此时,您可以将
A_文件夹/A_文件.html
复制到工作树之外的某个文件中(例如,在
/tmp
中或您喜欢的计算机上的任何位置)。现在,您将拥有该文件中的所有数据

我还有
branch\u b
它有file
b\u file.html

与前面一样,名称
branch_b
仅标识一次提交,特别是该分支上的最后一次提交。要从该提交中获取所有文件,只需运行:

git checkout branch_A
git checkout branch_b
现在,在您的工作树中,有来自该提交的所有文件。现在,如果愿意,您可以将
B_File.html
的内容复制到工作树之外,例如复制到
/tmp

现在您已经拥有了这两个文件内容,您可以选择存储库中哪些提交和/或分支(如果有)应该包含组合的内容。假设将它们放在新分支上的新提交中是正确的,该分支将从当前位于分支
master
上的最后一次提交扩展而来。您可以通过以下方式实现此目的:

git checkout -b newbranch master
这将使用分支上上次提交的文件填充您的工作树
master
,创建一个新的分支名称
newbranch
,并进行设置,使
newbranch
成为当前分支。此时您所做的新提交将添加到分支
newbranch

(如果这不是您想要的,例如,如果您想向现有的
分支\u A
添加新提交,您可以在此处再次运行
git checkout branch\u A
。请注意,我们在git中所做的唯一事情是在选择某个特定分支名称作为当前分支的同时操作工作树中的所有文件。)

现在,您位于目标分支上,希望在其中写入具有某个文件名的新提交,您可以使用该名称创建一个空文件:

cp /dev/null newfile.html
或:

(请记住,两个分支提示中的两个文件的内容都位于
/tmp/A_File.html
/tmp/B_File.html
。因此我们不需要保留现有的
A_文件夹/A.html
内容。我们只需要一个空文件。)

现在,您可以简单地将两个
/tmp
文件合并到一个文件中。但是,由于HTML文件的性质,您可能需要编辑结果以去掉一些多余的页眉和页脚行。您可能还希望以某种方式重新安排内容。用你喜欢的任何程序都可以做到这一切。Git没有参与这个过程!文件
newfile.html
A_文件夹/A.html
在您的工作树中,而不是在Git中;你可以做任何你喜欢的事情,用任何你喜欢的方法

一旦文件中包含了您希望放入新提交的内容,只需使用
git add
添加更新的或新的文件:

git add A_Folder/A_File.html

这样您就可以更新Git的索引,即Git将放入下一次提交中的文件(和内容)。然后,运行
git commit
进行新的提交,git将添加到当前分支中。

是的,但在我的例子中,两个文件中的一个不在同一文件夹中。在使用合并算法时,我是否应该将其设置为
A_Folder/A_File.html
而不是A_File.html?您的答案非常详细和有用,但是在大型文件中,手动合并这两个文件非常困难,特别是在存在冲突的情况下。我想让git做这个组合过程,但我没有