- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对git有点陌生,我已经使用了几个月,而且Im可以轻松完成大多数基本任务。所以...我认为现在该承担一些更复杂的任务了。
在我的工作中,我们有一些人在处理较旧的代码以对其进行更新,这涉及实际的代码工作以及将目录结构更新为更具模块化的方式。我的问题是,这两件事是否可以在并行分支中完成,然后合并或重新设置。我的直觉说不,因为dir重组是一个重命名,而git通过添加新文件并删除旧文件来重命名(至少这是我的理解)。但是我想确定。
这是场景:
父分支看起来像:
├── a.txt
├── b.txt
├── c.txt
├── lib
│ ├── a.txt
│ └── b.txt
└── test
└── c.txt
最佳答案
首先,请注意:您可以随时尝试合并,然后将其退出,以查看其作用:
$ git checkout master
Switched to branch 'master'
$ git status
$ git merge feature
$ git merge --abort
$ git reset --hard HEAD^
HEAD^
是当前提交的第一个父级,并且合并的第一个父级是“合并之前的内容”。因此,如果合并有效,则
HEAD^
是合并前的提交。)
git merge
将自动检测到的重命名。
diff.renamelimit
1是0
,而diff.renames
是true
:$ git config --get diff.renamelimit
0
$ git config --get diff.renames
true
diff
步骤。)git checkout master; git merge feature
的操作;我们需要在这里知道这两个名字。找到它们之间的合并基础:$ into=master from=feature
$ base=$(git merge-base $into $from); echo $base
ae47361...
或此处的其他内容。 (可以在这里到处随意键入master
和feature
而不是$into
和$from
。我正在使用变量,因此这是“食谱”而不是“示例”。)$into
和$from
进行比较,以查看哪些文件被检测为“重命名”:$ git diff --name-status $base $into
R100 fileB fileB.renamed
$ git diff --name-status $base $from
R100 fileC fileD
master...feature
获得第三个差异的效果:这里的三个点表示“查找合并基础”。)
A
eleted,
D
odified,
M
enamed等(此示例仅具有两个重命名,匹配率为100%)。
R
是
$into
,因此第一个列表是git认为已在
master
中发生的事情。 (当合并
master
时,这些是git“希望保留”的更改。)
feature
是
$from
,因此第二个列表是git认为
feature
中发生的事情。 (这些是git在合并时希望“现在添加到
feature
”中的更改。)
master
的文件git将被检测为已重命名。 R
列表相同,那么您可能会很好(但是仍然可以阅读)。如果第一个列表中存在R
,而第二个列表中没有...,请参见下文。 R
(或git checkout master; git merge feature
)时,git将进行第二个列表中所示的重命名,以便将这些更改“添加”到git checkout $into; git merge $from
中。 master
条目的D
和A
条目:这些发生在以下情况之一:在分支之一中,您不仅重命名了文件,而且对内容的更改如此之大,以致git不再检测到重命名。 R
或
$from
)中发生的事情。如果原始文件在此处被修改,则git将尝试将此处的更改引入重命名的文件中。那可能就是你想要的。如果原始文件未在此处修改,则git没有任何内容可放入,并且将保留该文件。那可能也是您想要的。同样,“坏”情况是未检测到的重命名:git认为原始文件已在
feature
分支中删除,并创建了其他名称的新文件。
CONFLICT (rename/delete): newname deleted in feature and renamed in HEAD.
Version HEAD of newname left in tree.
Automatic merge failed; fix conflicts and then commit the result.
feature
中以新名称保留了文件(我们可能要这么做);这是因为git可能错过了合并分支
master
中所做的更改的机会。
feature
中,但是git认为那里是一个新文件,git只会在工作树中留下文件的merge-into版本。发出的消息是相同的。在这里,我对
feature
进行了一些更改,以将
master
重命名为
fileB
,并在
fileE
上,确保git不会将更改检测为重命名:
$ git diff --name-status $base master
R100 fileB fileE
$ git diff --name-status $base feature
D fileB
R100 fileC fileD
A fileE
$ git checkout master; git merge feature
CONFLICT (rename/delete): fileE deleted in feature and renamed in HEAD.
Version HEAD of fileE left in tree.
Automatic merge failed; fix conflicts and then commit the result.
feature
。 Git正在打印新名称(名称的
fileE deleted in feature
版本);那是它相信您“想要”看到的名称。但是在
master
中“删除”的是文件
fileB
,由全新的
feature
代替。
fileE
可能能够处理这种特殊情况。)
git-imerge
(在源代码中用小写的
merge.renameLimit
拼写,但是这些配置变量不区分大小写),可以单独设置。将这些设置为0会告诉git使用“合适的默认值”,随着CPU的速度越来越快,这些默认值多年来已经发生了变化。如果未设置单独的合并重命名限制,则git使用diff重命名限制,如果未设置或为0,则再次使用合适的默认值。如果设置不同,则merge和diff将在不同情况下检测重命名。
limit
,例如
-Xrename-threshold=
的递归合并中设置“重命名阈值”。此处的用法与
-Xrename-threshold=50%
的
git diff
选项的用法相同。此选项首先出现在git 1.7.4中。
-M
分支上,并且执行
master
或
git merge 12345467
。这是git的作用:
git merge otherbranch
或git merge-base master 1234567
。git merge-base master otherbranch
,称为“基本”。 Git现在具有三个特定的提交ID:B
,合并基础;当前分支B
的提示的提交ID;以及您提供的提交ID,master
或分支1234567
的提示。为了完整起见,我们只用提交图来绘制这些内容。假设它看起来像这样:A - B - C - D - E <-- master
\
F - G - H - I <-- otherbranch
otherbranch
和E
作为其两个父项,但是我们想将注意力集中在生成的工作树上,而不是提交图上。 I
B
和E
),git计算两个差异,即la I
:git diff B E
git diff B I
git diff
进行的更改集,第二个是对branch
进行的更改集。otherbranch
,则可以使用git diff
设置用于重命名检测的“相似性阈值”(在合并过程中对其进行设置,请参见上文)。 Git的默认合并将自动重命名检测设置为50%,这是在没有-M
选项且-M
设置为diff.renames
的情况下得到的结果。 $ git diff B otherbranch # I tagged the merge-base `B`
diff --git a/fileB b/fileB.txt
similarity index 71%
rename from fileB
rename to fileB.txt
index cfe0655..478b6c5 100644
--- a/fileB
+++ b/fileB.txt
@@ -1,3 +1,4 @@
file B contains
several lines of
stuff.
+changeandrename
true
重命名为
fileB
,但是检测也可以跨目录使用。)请注意,这可以通过
fileB.txt
输出方便地表示:
$ git diff --name-status B otherbranch
R071 fileB fileB.txt
git diff --name-status
设置为
diff.renames
和
true
。)
diff.renamelimit = 0
到B
的更改(在I
上)组合成从otherbranch
到B
的更改(在E
上)。 branch
已从
lib/a.txt
重命名,它将连接它们。 (并且您可以通过执行
a.txt
来预览是否会这样做。)在这种情况下,自动合并结果可能是您想要的,或者足够接近。
git diff
的顺序
F
G
H
提交,一个步骤(也许是
I
)只是将
G
重命名为
a.txt
,而其他步骤(
lib/a.txt
,
F
和/或
H
)对
I
进行了许多其他更改( )愚弄git,以至于没有意识到文件已重命名。您可以在此处执行的操作是增加合并次数,以便git可以“查看”重命名。为了简单起见,我们假设
a.txt
不会更改
F
,而
a.txt
重命名它,以便从
G
到
B
的差异显示重命名。我们可以做的是首先合并commit
G
:
git checkout master; git merge otherbranch~2
G
重命名为
a.txt
,以对分支
lib/a.txt
进行新的合并提交,我们将进行第二次合并以引入
branch
和
H
:
git merge otherbranch
I
。我没有尝试过,但是对于困难的情况,这是显而易见的答案。
关于git - git merge 具有不同目录结构的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22582605/
这是代码片段。 请说出这种用小内存存储大数据的算法是什么。 public static void main(String[] args) { long longValue = 21474836
所以我使用 imap 从 gmail 和 outlook 接收电子邮件。 Gmail 像这样编码 =?UTF-8?B?UmU6IM69zq3OvyDOtc68zrHOuc67IG5ldyBlbWFpb
很久以前就学会了 C 代码;想用 Scheme 尝试一些新的和不同的东西。我正在尝试制作一个接受两个参数并返回两者中较大者的过程,例如 (define (larger x y) (if (> x
Azure 恢复服务保管库有两个备份配置选项 - LRS 与 GRS 这是一个有关 Azure 恢复服务保管库的问题。 当其驻留区域发生故障时,如何处理启用异地冗余的恢复服务保管库?如果未为恢复服务启
说,我有以下实体: @Entity public class A { @Id @GeneratedValue private Long id; @Embedded private
我有下一个问题。 我有下一个标准: criteria.add(Restrictions.in("entity.otherEntity", getOtherEntitiesList())); 如果我的
如果这是任何类型的重复,我会提前申请,但我找不到任何可以解决我的具体问题的内容。 这是我的程序: import java.util.Random; public class CarnivalGame{
我目前正在使用golang创建一个聚合管道,在其中使用“$ or”运算符查询文档。 结果是一堆需要分组的未分组文档,这样我就可以进入下一阶段,找到两个数据集之间的交集。 然后将其用于在单独的集合中进行
是否可以在正则表达式中创建 OR 条件。 我正在尝试查找包含此类模式的文件名列表的匹配项 第一个案例 xxxxx-hello.file 或者案例二 xxxx-hello-unasigned.file
该程序只是在用户输入行数时创建菱形的形状,因此它有 6 个 for 循环; 3 个循环创建第一个三角形,3 个循环创建另一个三角形,通过这 2 个三角形和 6 个循环,我们得到了一个菱形,这是整个程序
我有一个像这样的查询字符串 www.google.com?Department=Education & Finance&Department=Health 我有这些 li 标签,它们的查询字符串是这样
我有一个带有静态构造函数的类,我用它来读取 app.config 值。如何使用不同的配置值对类进行单元测试。我正在考虑在不同的应用程序域中运行每个测试,这样我就可以为每个测试执行静态构造函数 - 但我
我正在寻找一个可以容纳多个键的容器,如果我为其中一个键值输入保留值(例如 0),它会被视为“或”搜索。 map, int > myContainer; myContainer.insert(make_
我正在为 Web 应用程序创建数据库,并正在寻找一些建议来对可能具有多种类型的单个实体进行建模,每种类型具有不同的属性。 作为示例,假设我想为“数据源”对象创建一个关系模型。所有数据源都会有一些共享属
(1) =>CREATE TABLE T1(id BIGSERIAL PRIMARY KEY, name TEXT); CREATE TABLE (2) =>INSERT INTO T1 (name)
我不确定在使用别名时如何解决不明确的列引用。 假设有两个表,a 和 b,它们都有一个 name 列。如果我加入这两个表并为结果添加别名,我不知道如何为这两个表引用 name 列。我已经尝试了一些变体,
我的查询是: select * from table where id IN (1,5,4,3,2) 我想要的与这个顺序完全相同,不是从1...5,而是从1,5,4,3,2。我怎样才能做到这一点? 最
我正在使用 C# 代码执行动态生成的 MySQL 查询。抛出异常: CREATE TABLE dump ("@employee_OID" VARCHAR(50)); "{"You have an er
我有日期 2016-03-30T23:59:59.000000+0000。我可以知道它的格式是什么吗?因为如果我使用 yyyy-MM-dd'T'HH:mm:ss.SSS,它会抛出异常 最佳答案 Sim
我有一个示例模式,它的 SQL Fiddle 如下: http://sqlfiddle.com/#!2/6816b/2 这个 fiddle 只是根据 where 子句中的条件查询示例数据库,如下所示:
我是一名优秀的程序员,十分优秀!