- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个从未遇到过的git问题。
我有2个分支,其中有2个不同的文件。
如果我将一个合并到另一个中(在任一方向上),它会显示“已更新”。
为什么它认为它们是最新的,以及如何合并它?
我阅读了git merge does not merge(和其他)信息,他们都说:“如果它是最新信息,则说明您已正确合并。”
我意识到git认为它们已合并,但不是-我在2个分支中有不同的文件。
即使我进行更改并合并,它仍然会显示“已经是最新的”。
我可以让git来“忘记”我已经合并的它们,然后再次合并吗?
我不知道在这种状态下会发生什么,但这是一场噩梦。必须有某种方法可以解决此问题。
更新我的工作:
我是唯一从事此工作的人。我被要求添加一些新功能,因此我创建了master,new_features分支,并开始进行开发。然后,我被告知将其搁置一旁,并开发更高优先级的新功能,因此我又从master分支了另一个分支new_features2,然后开始着手开发这些功能。然后我被告知我们需要一些bug_fixes,然后我又在master分支中创建了一个bug_fixes。我修复了错误,并将bug_fixes合并为master。然后,我回到工作new_features2,使该工作正常,将master合并到new_features2中,进行测试,然后将new_features2合并到master中。到目前为止一切都很好。
现在,我回到使用new_features的工作。我完成了这些工作,然后将master合并到new_features中。它确实合并了一些东西。我进行了测试,发现new_features2或bug_fixes都无法正常工作。我看一下合并后的代码,似乎new_features2和bug_fixes的某些更改在new_features中,但并非全部。我尝试再次合并-它说“已经是最新的”。
最佳答案
大型修改:您可能想重新设定基准。
我将rebase部分放在顶部,但您可能需要先阅读其余内容。
变基
git中最有用的事情之一是挑选整个“branchlet”(一串以分支尖端结尾的提交),以有效地移动它们。也就是说,假设您现在对选择樱桃感到满意(如果需要,请参阅下文),假设您在提交图中有类似以下内容:
o--o <-- fix-bug-1234
/ \
...--o--o--o---o--o--o <-- develop
\
o--o--o--o <-- feature
feature
的工作,然后不得不对
develop
进行一些紧急更改,并重新合并了一个紧急错误修复程序;现在是时候回到
feature
了。
feature
的最新好东西开始,使用
develop
版本肯定会很好。
develop
的提示签出一个新的功能分支:
git checkout -b new-feature develop
o--o <-- fix-bug-1234
/ \
...--o--o--o---o--o--o <-- develop, HEAD->new-feature
\
o--o--o--o <-- feature
feature
提交中进行选择。我们可以编写
feature~4..feature
,但是这要求我们对提交进行计数,因此,由于我们对git set表示法一无所知,因此我们可以使用
develop..feature
查找相同的提交集。这使我们可以将其用作第二个git命令:
git cherry-pick develop..feature
o--o <-- fix-bug-1234
/ \
...--o--o--o---o--o--o <-- develop
\ \
\ o--o--o--o <-- HEAD->new-feature
\
o--o--o--o <-- feature
feature
重命名为
old-feature
,然后将
new-feature
重命名为
feature
:
git branch -m feature old-feature
git branch -m new-feature feature
git rebase
轻松完成所有这些操作。我们不必以
git checkout -b
开头,然后是
git cherry-pick
和两个重命名步骤,我们只需要执行一个
git checkout
和一个
git rebase
:
git checkout feature
git rebase develop
rebase
命令使用我们的一个参数
develop
来:
develop..feature
develop
的尖端之后rebase
的更高级形式将提交给樱桃的提要清单与去往的地方分开,但是在典型情况下,我们不需要这些。
develop..feature
东西)中将它们排除,否则复制提交将在合并提交之后“提交”。当序列中有合并提交时,这会产生令人惊讶的结果。
$ git checkout larry-widget-fixes
$ git merge alice-crossbar-fixes
git merge
不会使事情匹配。取而代之的是,它返回到通用基础,以查看(1)您更改了什么,以及(2)Alice更改了什么。然后,它尝试将这两组更改合并为一个合并(合并)更改。
shims.data
的很好的副本(就此而言,合并基础也是如此,但是让我们在这里使用爱丽丝的用法):git checkout alice-crossbar-fixes -- shims.data
shims.data
的版本,现在您有了所需的版本。 badf00d
中破坏了填充,并且您在该处所做的所有其他更改也应该都撤消,或者可以撤消它们。然后可以运行:git revert badf00d
git revert
命令将给定的提交转换为补丁,然后反向应用补丁,以使该提交的效果未完成,并根据结果进行新的提交。 git reset
。git reset
过于复杂(git伙计们在一个命令中填充了大约五到八个逻辑上不同的操作); (c)StackOverflow上已经有很多很好的例子。 (第2步中的git revert
也是如此,但是git revert
简单得多,因此我将其保留了下来。)...--o--*--o--o--o <-- larry-widget-fixes
\
o-o-o-o-o <-- alice-crossbar-fixes
*
。
M1
标记为易于查看):
...--o--o--o--o--o--M1 <-- larry-widget-fixes
\ /
o-o-o-o-o <-- alice-crossbar-fixes
...--o--o--o--o--o--M1-o <-- larry-widget-fixes
\ /
o-o-o-o-*--o--o <-- alice-crossbar-fixes
git merge alice-crossbar-fixes
*
标记了它。 Git将找出自
*
以来爱丽丝发生了什么变化,以及自
*
以来您发生了什么变化,并尝试将这些变化结合起来。您已经掌握了Alice的所有早期更改-它们已经在您的分支中,使用
M1
-所以git不再查看这些更改是一件好事。 Git只会尝试将
*
之后的Alice新更改添加到
*
之后的更改中(您的Alice更改版本)。
M1
中对Alice所做的更改版本是一堆错误的文件怎么办?
M1
之前向提交绘制一个新箭头,如下所示:
..........<-- retry
.
...--o--o--o--o--o--M1-o <-- larry-widget-fixes
\ /
o-o-o-o-o--o--o <-- alice-crossbar-fixes
retry
:
git branch retry <commit-id> && git checkout retry
git checkout -b retry <commit-id>
retry
指向所需的提交)。现在,如果我们这样做:
git merge alice-crossbar-fixes
M1
指向的
retry
之前的commit与
alice-crossbar-fixes
的(新的,当前的)提示合并。 Git将再次找到合并基础,这是这两个分支上最近的提交,这又是我们原始的合并基础。
M1
,而且还将忽略此后所做的新工作。
git checkout -b <commit>
以返回该状态,然后开始执行
git cherry-pick
之类的操作来重新添加特定的提交。
M1
之前的
retry
(它看起来确实很近),因此我们创建了新的分支(让我们将其称为
git cherry-pick
之外的其他名称),它指向此处:
git checkout -b rework <commit-ID>
197a3c2...
从其他提交中选择,从中提取所做的更改。我们给它更多的提交ID,更多的
git cherry-pick
字符串,并且它将提交之前的状态与该提交时的状态进行比较。结果是一个补丁,但是实际上,它比常规的仅diff补丁要好一些,原因有两个:
git cherry-pick
所做的就是将补丁应用于当前提交,然后进行新提交,重新使用原始提交消息。
xbranch
多次提交,它将全部完成:
git cherry-pick xbranch~3..xbranch
xbranch~3
上的所有提交,但从
xbranch
及更早版本开始的提交除外,即,我们沿ojit_code倒退了三个步骤(假设没有合并...),并应用其余三个提交:
N N Y Y Y [do we take it?]
| | | | |
v v v v v
...-o-o--o-o-o <-- xbranch
...-o--o <-- larry-widget-fixes (before cherry pick)
关于git - git将不会 merge -说“已经是最新的”。当不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36803814/
我正在编写一个 JS 程序,我有一个条件可以根据输入进行一些算术运算。如果我遇到操作类型为“add”,我需要将两个值相加;如果我得到“times”作为我的运算符值,我需要相乘。 我尝试使用基本的 if
我正在编写一个仅作为查看器的应用程序 - 无需创建、无需编辑、无需保存。 显然,那么,不会有自动保存,但是还有什么其他东西可以从 autosavesInPlace 返回 YES 改变世界,从而对观看者
Azure 开始出现以下错误: Unsupported token. Unable to initialize the authorization context. 每当我尝试更改我的应用程序时,我都
当我编写 out.println() 时,Eclipse 提示 out 无法解析。 我导入了 java.io.* 和其他 servlet 包。 最佳答案 只是在黑暗中拍摄,我认为这就是您正在寻找的出路
Azure 开始出现以下错误: Unsupported token. Unable to initialize the authorization context. 每当我尝试更改我的应用程序时,我都
是否可以执行类似的操作来检查 radio 表单是否未选中: if !($(this).find("input:checked")) {} 正确的语法是什么? 最佳答案 试试这个: $(this).fi
我正在尝试从表中选择行,其中 date 列值等于澳大利亚悉尼的当前日期 (UTC+10h)。服务器位于悉尼,因此我想使用 SYSDATETIME()。这是我的查询: SELECT * FROM dat
我听说 JavaScript 实际上并不像其他语言那样“指向”内存中的值(或对象,因为在 JS 中一切都是对象)。相反,JS 变量引用内存中的其他值/对象。这是真的?指向和引用之间的语义区别是什么?
我的计算机科学类(class)有一项作业,其中要求读取包含多个测试分数的文件,并要求我对它们进行求和并求平均值。虽然求和和求平均值很容易,但我在读取文件时遇到问题。老师说用这个语法 Scanner s
Java 的 XML 解析器似乎认为我的 XML 文档在根元素之后的格式不正确。但我已经用几种工具验证了它,但他们都不同意。这可能是我的代码错误,而不是文档本身的错误。如果你们能给我提供任何帮助,我将
根据这份文件: http://www.stroustrup.com/terminology.pdf l 值具有同一性且不可移动。 公关值是可移动的,但没有身份。 x 值具有同一性并且是可移动的。 关于
这个问题在这里已经有了答案: What does "atomic" mean in programming? (7 个答案) 关闭 5 年前。 我正在阅读 MongoDB 的 documentati
在 PHP 和 MySQL 中有没有一种方法能够比较 2 个不同的数组(列表)变量并说出有多少项是相同的 例如, $array1 = "hello, bye, google, laptop, yes"
本文来自 Effective Java Programs that use the int enum pattern are brittle. Because int enums are compil
C++ 中有一些特性是类型安全的,而另一些则不是。 C++ 类型安全示例: char c = 'a'; int *p = &c; // this is not allowed (compiler
我有一个 CS 课的作业,它说要读取一个包含多个测试分数的文件,并要求我对它们求和并取平均值。虽然求和和平均很容易,但我在读取文件时遇到了问题。老师说要用这个语法 Scanner scores = n
嗯.. 有时,PyDev 会说“ Unresolved 导入错误”。 在我的环境中 Python2.6.6 Eclipse3.7 PyDev2.2.2 错误是。 > Unresolved import
我正在向服务器发送请求,服务器正在处理请求并做出响应。但是在我的应用程序中,我收到了: Error Domain=NSURLErrorDomain Code=-1017 "cannot parse r
在我最近的一次讨论中,有人告诉我这样说是不正确的,因为 Ajax 已经是 Javascript。 上下文: “我如何在网页中 blablababal,这样它就不必刷新页面” 我的回答: “使用 Jav
下午好。 我一直在尝试使用 ffmpeg 将 .mpeg 拆分为一系列 .jpeg 图像。请注意,这是指定 here 的逆问题,但我面临的问题与该线程的作者面临的问题不同。 具体来说,我已经在我的 f
我是一名优秀的程序员,十分优秀!