问题描述
我们正在对一个项目进行快速的持续开发,因此开发人员存储库每隔几天就会更改一次。
我不熟悉 Git 和 Github
我最初是将存储库下载为 zip 文件,然后根据我们的需求在本地进行一些更改。每次都进行一次检查以确认更改的文件并手动解决与我在本地更改的文件以及来自开发人员存储库的任何新更新的任何冲突。
由于这很麻烦,我然后在本地创建了远程存储库的克隆,如果与我在获取时在本地更改的文件发生冲突,我会存储我的本地文件,然后手动添加我更改的行在获取远程分支之后。
然后我认为可能更容易分叉存储库对我的分叉进行更改,然后通过从它们中获取最新提交来自动合并开发人员的任何更改。我一直在使用 github.com 和 github 桌面的 Windows 组合。
但是现在存在冲突 - 我假设我对开发人员现在已经更改的相同文件所做的更改。
这个分支在上游后面有 6 次提交,并且存在必须解决的冲突。 打开拉取请求以获取上游并查看更改或解决冲突。
但是,根据我所阅读的内容,这会将我的更改发送回上游给开发人员,让他们接受到他们的存储库中?
我想在本地创建更改而不是将它们返回到上游,而只是将上游的更改合并到我的 fork 中,并在文件中逐行手动处理冲突。目前,可能是错误的,我已经分叉并在主分支中进行了本地更改。
实现这一目标的最佳方法是什么?
解决方法
您可能应该在单独的分支中完成所有自定义工作。初始设置如下所示:
-
git clone
远程仓库 -
git checkout -b updates
创建并移动到新分支 - 在
updates
分支上进行更改
初始设置后,您可以在远程存储库更新时执行以下操作:
-
git checkout master
切换到存储库的“干净”版本 -
git fetch
下拉远程更改 -
git checkout updates
切换回带有本地修改的分支 -
git merge master
启动更新代码的合并并手动处理任何冲突
有关合并命令的详细信息,请参阅 https://git-scm.com/docs/git-merge。
,好的,我不清楚您为什么要这样做 - 如果您提供用例,您可能会得到更好的建议。例如。如果是用于构建系统,那么可能会以其他方式注入额外内容,例如使开发人员的版本可配置或在 git 之外添加秘密(比如);如果用于部署,那么开发人员的版本应该与部署没有太大区别。通常还有其他方法可以做更简单的事情 - 例如使用传统补丁。
话虽如此,对于这种方法,我会不时将您的 mod 重新设置为最新版本的 main/master,并在那时处理任何冲突。在这种情况下使用 rebase 而不是 merge 会给你一个更清晰的历史(你只会看到你自己一直在主分支上添加的一些东西)并且更容易专注于开发者版本开始发生根本变化时应该做什么。