git - Git 直接拉合并更改,即使有冲突?
问题描述
我有一些本地更改,并且我知道自上次拉动以来回购已向前推进。当我执行 git pull 时,我收到以下消息 -
$ git pull
Enter passphrase for key '/c/Users/xxx/.ssh/id_rsa':
remote: Counting objects: 65, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 65 (delta 29), reused 0 (delta 0)
Unpacking objects: 100% (65/65), 16.35 KiB | 7.00 KiB/s, done.
From bitbucket.org:abc/someproject
ashljkl..db9e852 feature/somefeature -> origin/feature/somefeature
error: Your local changes to the following files would be overwritten by merge:
src/main/java/com/somefilepath
Please commit your changes or stash them before you merge.
Aborting
Updating ashljkl..db9e852
来自这篇 SOF 帖子:如何忽略“git pull”上关于我的本地更改将被合并覆盖的错误? 我可以弄清楚如何解决这个问题。1) git stash local change 2) git pull 3) 然后 git stash pop 隐藏的更改。
但我想知道是否有更简单的方法来处理这个问题 -只需git pull
使用一些选项/标志直接将来自 repo 的更改与我的本地更改合并。在合并的过程中,如果有冲突,我可以用 git 显示冲突并在有冲突的源文件中放置冲突标记。
解决方案
没有简单的方法可以做到这一点。解决此问题的最简单、最好的方法是存储您的更改,然后拉取。
出现这种情况的原因是这里发生的任何类型的合并都涉及索引。合并会将更改写入索引,然后签出文件。您的更改可能会或可能不会在索引中。如果您没有git add
在该特定版本上运行,它将不在索引中,并且任何合并操作都会在结帐期间破坏它,而不是实际执行合并。
如果这些更改在索引中,您可以尝试执行 agit fetch
然后自己与 执行合并git read-tree -um
,检出文件。但是,在这种情况下,Git 所做的三向合并与正常的递归合并不同,因此您将失去任何让诸如重命名之类的东西起作用的能力。因此,虽然这是可能的,但这不是一个好的选择,您可能会对结果不满意。您还必须自己进行合并基础计算(或编写脚本),这很麻烦。
所以最好的解决办法就是藏在这里。
推荐阅读
- f# - 在 F# 中计算列表中不变的元素数量
- html - 在同一行上使用 2 个 div 内联块调整窗口大小会触发奇怪的行为
- php - jQuery Popup 不适用于 PHP 的输出
- selenium - Microsoft Edge WebDriver - 无法为自动化使用默认应用数据配置文件 - Edge Ver 80
- python - 如何将字典的值写入 CSV 文件
- python - Pandas DF 去除重复姓氏
- sql - 如何通过删除 MS Access 中的内部查询名称来连接两个查询
- python - 运行 mmvec 示例
- java - 如何在 Spring Boot 应用程序中使用 BigTable?
- r - GGplot 平均条形图