git - 优先考虑本地更改
问题描述
我正在从网站上抓取页面,整理它们,然后将它们编译成电子书。我将 Git 用于代码和 HTML 内容。
我必须对某些页面进行手动编辑,并且它们通常会在上游更新。这给我留下了如何在站点更新时保留本地编辑的问题。
例如,我下载了页面A的v1,我删除了一个无效的“”,并提交了我的更改;后来我下载了页面A的v2,它有新的内容,但仍然具有“”。我想将新内容合并到我的页面 A 副本中,但也应用我的本地更改。
我怀疑有时我需要手动解决冲突,但总的来说这应该是自动的。
我尝试过合并策略、变基和其他方法都无济于事。我错过了什么?
编辑:
为了帮助澄清我的问题:
git init
wget -O page.html https://example.com/
git add page.html
git commit -a -m "w0"
git checkout -b ebook
sed -i -e 's/http:/https:/' page.html
git commit -a -m "e1"
git checkout master
git merge ebook
wget -O - https://example.com/ | sed -e 's/may/may not/' > page.html
git commit -a -m w1
git checkout ebook
git merge master
最后,最后一次本地编辑被保留,但第一次丢失。我知道我在做一些愚蠢的事情,但是...
解决方案
我会维护一个只跟踪原始网页的分支,我们称之为web
. 每次下载更新时,将其提交到web
分支。然后,您需要一个ebook
分支来进行更改。更新web
分支后,将其合并到您的ebook
分支中,解决出现的任何冲突。ebook
最初创建为初始web
.
场景:假设您以 W0 作为 Web 服务器上的初始状态开始,然后您在提交 E1 和 E2 中进行了本地更改。然后 Web 服务器更新为 W1,您合并到 W1ebook
以获取 E3。
这会给你一个看起来像这样的历史:
W0 -------- W1 (web branch)
\ \
E1 - E2 --- E3 (ebook branch)
当您下载到 Web 的下一个更新 W2 时,您将获得此提交图,假设您还具有 E4 作为 W1 所需的额外重新格式化更改:
W0 -------- W1 -------- W2 (web branch)
\ \ \
E1 - E2 --- E3 - E4 --- E5 (ebook branch)
当您将 W2 合并到 E4 以获得 E5 时,Git 应该只将 W1 和 W2 之间的更改应用到 E4,这应该可以满足您的需求。
注意:这个过程只会从web
into合并ebook
,永远不会从ebook
into 合并web
。如本答案下方的评论中所讨论的,从ebook
后面合并将取消预期的效果。web
推荐阅读
- r - ``data.table`` 对象,嵌套在 ``xgboost`` 对象中,保存为 ``.rda`` 时不会加载
- vue.js - this.$store 在示例应用程序结构之后未定义
- php - 如何解决这个 laravel 迁移错误创建数据库表?
- php - 警告:getimagesize(images/IMG_20181017_115937.jpg):无法打开流:C:\wamp64\www\...\FPDF\fpdf.php 中没有这样的文件或目录
- amazon-web-services - 复合排序键与排序键
- android - 如何使用我们的应用程序将 ble 的更新代码发送到 ble 设备
- rancher - 有没有一种简单的方法可以在 RancherOS 上获得文本编辑器(如 nano)?
- javascript - 如果数组中已经存在一个对象,则从数组中删除它(否则添加它)
- erlang - 格式:“读取 /opt/ejabberd/.erlang.cookie 时出错:eacces”
- django - 无法在 django 中进行身份验证