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
,以使本地版本保持最新。将你所有的工作与他们的隔离是很重要的
一旦您对它感到满意,使用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
。您的操作方式将很难维护,将它们不相关的代码合并到您的代码中。可能有一种更简单的方法,但这取决于为什么要引入不相关的代码。他们的项目与您的项目有什么关系?我这样做了,合并与所有文件都有冲突,而不仅仅是外部存储库文件。如果我使用合并策略选项keepours
,它会将以前提取的文件视为我的,而不仅仅是我编辑的文件,这就是问题所在,是否有任何策略可以获取“我们的”文件,但它们确实是“我们的”(即由我创建或修改的),但我可以再试一次,也许我做错了什么,确切的原因是什么
git reset origin/HEAD -- myfile_iterator