Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.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_Version Control - Fatal编程技术网

Git 将存储库的一部分合并到我的存储库中

Git 将存储库的一部分合并到我的存储库中,git,github,version-control,Git,Github,Version Control,我有一个存储库,我想将另一个存储库中的主分支添加到我的存储库中,所以我这样做了: git remote add upstream repo_link git pull upstream master --allow-unrelated-histories 然后我推到原点,就这样 现在,我想让它保持最新,但不丢失我的更改,所以我过滤我创建/修改的文件,用它获取作者的电子邮件(然后用python或bash执行一些逻辑) 我从另一个存储库中提取 git pull upstream maaster -

我有一个存储库,我想将另一个存储库中的主分支添加到我的存储库中,所以我这样做了:

git remote add upstream repo_link
git pull upstream master --allow-unrelated-histories
然后我推到原点,就这样

现在,我想让它保持最新,但不丢失我的更改,所以我过滤我创建/修改的文件,用它获取作者的电子邮件(然后用python或bash执行一些逻辑)

我从另一个存储库中提取

git pull upstream maaster -X theirs
然后,我重新设置了我在检查邮件时得到的文件,就像这样

git reset origin/HEAD -- myfile_iterator
这很好,但有一个大问题:
myfile
s必须再次提交,为什么?它们是完全相同的文件。我不想修改
myfile
s的历史记录,我想让
myfile
s始终保持不变

据我所知,
reset
在给定的分支repo中下载给定提交的文件,使其看起来像一个未修改的文件,所以我不明白为什么它要求我再次提交它

有没有更好的方法来实现这一点?基本上,我想要的是“及时冻结”那些我修改过的文件,以及其他所有从外部存储库中提取的文件。我澄清我刚开始使用git,所以可能有更好的方法


关系基本上是我修改那个项目,我知道我可以做一个fork或类似的东西,但我不想丢失提交历史,我也不想启动一个新的存储库,因为“watchs”、forks等等。我最初创建了一个新的存储库而不是fork,因为我对git一无所知

你可能认为你让事情变得更容易了,但你在和Git战斗,而且做得很艰难
git reset
和处理不相关的历史记录和奇特的合并都是非常高级的,对于您所做的工作来说完全没有必要

现在,我想让它保持最新,但不丢失我的更改,所以我过滤我创建/修改的文件

更改通常涉及许多文件,需要所有这些更改才能正常工作。排除他们对您接触过的任何文件的更改可能会破坏代码

您不需要做任何花哨的事情,这就是合并的目的。将您的代码与他们的代码合并将使他们的更改与您的更改交错。如果两人更改相同的代码,则会发生冲突。冲突无法解决,Git无法为您解决。如果你让他们和我们的或他们的一起离开,你很可能会破坏密码。你必须考虑每一个冲突以及如何解决它们。

这些都不是必需的,这就是合并的目的
git-pull
只是一个
git-fetch
和一个
git-merge
,因此
git-pull
应该做正确的事情


保持简单<代码>git克隆项目。做一根树枝。你在那个部门工作。当您想要更新
git fetch
以从上游项目获取最新版本,然后
git merge origin/master
以将他们的工作合并到您的分支中时

  • git获取来源
  • git合并源站/主站
(您可以通过git pull来实现这一点,但在学习过程中,最好执行这两个步骤来了解它们的功能。)

你所有的工作都在一个分支机构里完成。仅在master中使用
git pull
,以使本地版本保持最新。将你所有的工作与他们的隔离是很重要的

一旦您对它感到满意,使用Github fork就不会太复杂了,通读一遍。也很好

关于具体问题


*重置下载给定分支中给定提交的文件,repo,无论什么

git重置
很复杂。它可以做很多不同的事情

首先,git reset不下载任何东西。没有你的许可,Git从不与网络交谈。三个基本的网络命令是
git fetch
git push
git pull
(执行
git fetch
)。其他一切都是本地的

使它像一个未修改的文件,所以我不明白为什么它要求我再次提交它

它不是未经修改的。有点乱

git重置原点/头--myfile\u迭代器

这只会影响暂存区域(您要添加的内容)。它不会更改工作树(实际文件)或提交。它相当于新的
git还原--source origin/HEAD--staged myfile\u迭代器

剩下的是暂存的myfile_迭代器的源/头版本和磁盘上的myfile_迭代器版本。如果origin/HEAD中的myfile\u迭代器与您头部中的版本(即您上次提交的版本)不同,它将显示为一个阶段性更改

使用
git reset
需要对工作树、暂存区域、头部和提交历史有明确的了解。现在不要搞砸了。改用
git restore

注:
origin/HEAD
不一定等同于
origin/master
<代码>原点/头部可能是任何东西


但所有这些都是不必要的。

“我想让它保持最新,但不会丢失我的更改”您不需要做任何花哨的事情,这就是合并的目的
git pull
只是一个
git fetch
加上一个
git merge
。您的操作方式将很难维护,将它们不相关的代码合并到您的代码中。可能有一种更简单的方法,但这取决于为什么要引入不相关的代码。他们的项目与您的项目有什么关系?我这样做了,合并与所有文件都有冲突,而不仅仅是外部存储库文件。如果我使用合并策略选项keep
ours
,它会将以前提取的文件视为我的,而不仅仅是我编辑的文件,这就是问题所在,是否有任何策略可以获取“我们的”文件,但它们确实是“我们的”(即由我创建或修改的),但我可以再试一次,也许我做错了什么,确切的原因是什么
git reset origin/HEAD -- myfile_iterator