Github:从fork上游合并时忽略特定文件

b5buobof  于 2023-10-14  发布在  Git
关注(0)|答案(3)|浏览(143)

我有一个正在生产的项目的分支-该项目有一个scheme.json文件,用于设置网站的颜色和基本主题。我在项目的其余部分的分支上做了一些错误修复和诸如此类的事情,我想将这些更改合并回原始项目,而不需要删除它们的scheme.json文件。我该怎么做?
注意:scheme.js文件需要在存储库中(不能做gitignore),因为Vercel正在从存储库中提取以托管网站。

rkttyhzu

rkttyhzu1#

我想将这些更改合并到原始项目中,而不删除它们的scheme.json文件。我该怎么做?
这是一个完美的例子,说明你应该签入temporary commit。然后,在为拉取请求推送分支之前,使用交互式变基来清理分支时,

pick 100106 bugfix 3
pick 100105 bugfix 2
pick 100104 ==== some other local changes to scheme.js ====
pick 100103 whatnot 2 that also modifies scheme.js
pick 100102 whatnot 1
pick 100101 bugfix 1
pick 100100 ==== my local colour theme changes in scheme.js ====

pick 100106 bugfix 3
pick 100105 bugfix 2
pick 100103 whatnot 2 that also modifies scheme.js
pick 100102 whatnot 1
pick 100101 bugfix 1

请注意,这里绝对没有任何关于Vercel的具体内容。scheme.js也没有什么特别的,它可以是任何其他文件,也可以是多个文件。
也许你在删除临时提交时会遇到冲突,如果是这样的话,我推荐using KDiff3 to resolve them

2q5ifsrm

2q5ifsrm2#

这不是最干净的方法,但我认为可以通过从原始fork创建一个新的分支(没有本地更改),然后从上游拉取最新的更改来实现

git checkout <original forked commit>
git checkout -b <merge-branch>
git pull <upstream-remote> <upstream-branch>

然后使用--no-commit选项将本地更改分支合并到新的合并分支而不提交,这样您就可以在合并提交中排除预期的文件。假设我想忽略scheme.json文件,我运行以下命令

git merge --no-ff --no-commit <local-branch>
git reset HEAD scheme.json
git checkout -- scheme.json
git commit -m "Merge <local branch> to <merge branch>"

之后,您可以将新的分支推送到GitHub,然后您可以从新的分支到上游分支创建合并请求

git push <forked remote> <merge-branch>
u4dcyp6a

u4dcyp6a3#

the documentation来看,Vercel似乎提供了一种设置的方法:

  • 运行应用程序时自定义环境变量
  • 在部署应用程序时配置生成命令能力

上述功能(实际上是其中任何一个)允许您拥有一个版本化文件,以及一个在开发设置和生产设置之间不同的运行时:

  • 你可以将你的scheme文件从plain json切换到JavaScript,并从环境中读取一些值:
settings.color = process.env.MYAPP_COLOR || "purple"
  • 你可以在你的package.json中设置一个动作(例如:npm run deploy-prod还是yarn run deploy-prod?),它在开发环境中使用settings.dev.json文件时复制或符号链接settings.prod.json文件。

除此之外:合并当前代码的一种快速方法是:

  • 创建一个提交,在那里您可以恢复设置的生产值,
  • 将该代码合并到主分支中,并将该版本部署到Vercel,
  • 创建一个新的提交,它恢复了你在分支上的开发值

从一个特定的提交中恢复一个文件的内容(在那个例子中是scheme.json)是:

git checkout <commit sha or name> -- scheme.json

相关问题