- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据我对 merge 冲突的理解,当两个人更改了同一文件和/或修改了该文件中的同一行时,就会发生 merge 冲突。所以当我做一个git pull origin master
我期望 merge 冲突,因为两个版本中的同一行是不同的,但是看起来git决定覆盖我的本地文件。
要提供更多信息,
几天前,我在Github上推送了我的版本。然后有人 pull 了它,使用它,然后将其推回到github。另一个家伙修改的两个文件对我来说很有趣。
第一个文件是配置文件,另一个人在其中更改了密码。因此,当我从github pull 出时,本地版本中的密码与github上的密码不同。但是,在我的终端上,它说
Auto-merging <filename>
git checkout -b "misc"
git pull origin master
最佳答案
Git的行为正确。这是预期的结果(尽管对您而言不是真正的“期望”)。
关于如何与Git一起使用以使其对您真正有用的内容,在底部有一些介绍。
除了Mykhailo Kovalskyi's answer之外,还有一种更可能的情况。您这样做:
git checkout -b "misc"
git pull origin master
第一行很简单。这是第二个问题,因为
git pull
是
git fetch
,后面是
git merge
,这两者都非常复杂。
git log
进行查看,请使用
--graph
(通常与
--oneline
一起使用)。要使用可视化工具查看它,请使用诸如
gitk
之类的东西或许多烦人的GUI中的一种,这些 View 会给您提供类似于
here所示的 View (这是关于stackoverflow的随机选择的问题,它涉及
gitk
和
git-gui
中看到的内容)。
git fetch
和
git merge
的运行情况。
master
分支的存储库图,上面有四个提交:
o--o--o--o <-- master
master
分支“指向”最尖端的提交。在此图中,右侧有较新的提交,即最右边的提交。
o--o--o
中的线实际上应该是箭头:
o <- o <- o
。但是这些箭头都指向后方,这很烦人,对人类几乎没有用,因此最好将它们绘制为线条。事实是,这些向后箭头是Git查找较早提交的方式,因为分支名称仅指向最尖端的提交!
HEAD
,它是“当前提交”的符号。 HEAD正常工作的方式是它实际上包含分支名称,然后该分支名称指向提示提交。我们可以用一个单独的箭头绘制它:
HEAD
|
v
o--o--o--o <-- master
但这占用了太多空间,因此我通常使用以下方法:
o--o--o--o <-- master (HEAD)
Git将发现
HEAD
已“附加到”
master
(包含名称)
master
,然后按照从
git checkout -b misc
到向后提交的反向箭头进行操作。
Hint: use
git log --decorate
to show branch names andHEAD
. It's particularly good with--oneline --graph
: think of this as a friendly dog: Decorate, Oneline, Graph. In Git 2.1 and later,--decorate
happens automatically, so you don't have to turn it on yourself most of the time. See also this answer to Pretty git branch graphs.Note that
git log --decorate
prints the decoration asHEAD -> master
whenHEAD
points tomaster
. WhenHEAD
points directly to a commit, Git calls this a detached HEAD, and you might seeHEAD, master
instead. This formatting trick was new in Git 2.4: before that, it just showedHEAD, master
for both detached HEAD mode, and non-detached-HEAD mode, for this case. In any case, I call "non-detached" an attached HEAD, and I thinkmaster (HEAD)
shows this attachment pretty well.)
git gc
步骤创建一个新的分支名称。默认情况下,这个新的分支名称指向当前的(HEAD)提交,所以现在我们有了:
o--o--o--o <-- master, misc (HEAD)
git fetch
删除它们可能很困难。即使您希望它们消失,Git也会尽力让您找回。
git fetch
git fetch origin
的功能可以概括为:
master
时会发生什么。你有这个:
o--o--o--o <-- master, misc (HEAD)
他们有这个,在
origin/master
上有一些额外的提交(而且我们现在不在乎他们的HEAD):
o--o--o--o--o--o <-- master
您的Git重命名了它们的主文件,并在自己的末端将其称为
origin
,以便您可以使它们保持笔直。他们的两个新提交都添加到您的存储库中,所有这些都类似于Borg。这些新的提交指向具有常规向后箭头的现有四个提交,但是现在绘制图形需要更多的空间:
o--o--o--o <-- master, misc (HEAD)
\
o--o <-- origin/master
请注意,您的所有分支都没有更改。仅
origin/master
更改。您的Git增加了它们的技术独特性2,并重新指向
master
以跟踪“上次我检查时
origin
在
12ab9fc7...
上的位置”。
12ab9fc7...
,而您的Git具有commit
git merge
,则您的Git已经具有其提交,反之亦然。所有这些背后的数学是相当深刻而优美的。
git pull
git merge
的第二部分是运行
git merge origin/master
。它运行
git merge
的等效项3。
git merge
命令从查找 merge 基础开始,这是图突然变得很重要的地方。
o--o <-- branch1 (HEAD)
/
o--o--o--*
\
o--o--o <-- branch2
*
的作用是找到最近的共同祖先提交,我将其绘制为
o
而不是这里的
git merge
。这就是 merge 的基础。这只是两个分支“ fork ”的起点。
branch1
的目标是找出“您”已更改的内容-自提交
*
以来您在
branch2
中所做的工作-以及“他们”已更改的内容,即自提交
*
以来
git diff
中已更改的内容。为了获得这些更改,Git运行两个
*
命令。
o--o--o--*--o--o <-- branch1 (HEAD)
\
o--o--o <-- branch2
这是同一张图,所以它是同一张 merge 。 Git将提交
branch1
与
*
的提示进行比较(“我们的两次提交有什么变化?”),然后将
branch2
与
*
的提示进行提交(“其三个提交有什么变化?”)。然后,Git会尽力 merge 这些更改,并根据结果进行新的 merge 提交。所有这些 merge 和提交的确切细节都无关紧要,因为我们没有这样的图。
o--o--o--* <-- master, misc (HEAD)
\
o--o <-- origin/master
请注意,我在这里保留了
git merge
的概念。那是因为
misc
仍然找到 merge 基础。这里的问题是 merge 基础是分支技巧:名称
*
直接指向commit
git diff <commit-*> <commit-*>
。
*
,则差异显然为空。 Commit
*
与commit
misc
相同。那么如何 merge 这些呢?
HEAD
分支标签并将其向前滑动,沿着狗腿向下然后向右滑动。结果看起来像这样:
o--o--o--o <-- master
\
o--o <-- origin/master, misc (HEAD)
所以现在我们的配置文件是
misc
提交中的一个,这是
origin/master
的最尖端的提交,与
git merge origin/master
相同的提交。
git fetch origin
的细节在这里几乎无关紧要,但与历史有很大关系。在Git的早期版本1.8.4之前,实际上没有真正更新过
origin/master
的某些
git fetch
。这是一个错误的设计决定,在所有现代Git版本中,
master
都会对其进行更新。
git pull
,因为它已经打乱了):
o--o--o--* <-- misc (HEAD)
\
o--o <-- origin/master
我们可以代替让
git merge
运行
git merge --no-ff origin/master
,而运行我们自己的
git pull
,以 merge origin/master,但不允许Git进行快速转发。这样有帮助吗?
git diff <commit-*> <commit-*> # this diff is empty
git diff <commit-*> origin/master # this is "what they changed"
然后,Git将我们的更改(无)与它们的更改 merge ,并进行新的 merge 提交:
o--o--o--o------o <-- misc (HEAD)
\ /
o--o <-- origin/master
我们有一个不同的图(有点像汤勺或
Big Dipper),但是我们接受了它们的更改,包括密码更改,而没有保留任何内容(自 merge 基础以来我们没有任何更改)。
A
.4。我们也可能希望选择一个较早的时间来建立自己的分支。我们希望图的分支保持它们自身的独特性。我给了其中一些提交字母名称,以便我可以谈论它们:
A-----B <-- misc (HEAD)
/ /
o--o--o--o <-- master
\
o--C <-- origin/master
在commit
git merge
中,我们将配置文件更改为具有不同的密码。然后,我们
master
(不是快进)
master
的技巧来获取新内容,而无需更改密码。这个步骤可能是非常手动的,也可能是全自动的,但是一旦提交,我们就完成了:提交是永久的;它们无法更改。5
git merge origin/master
“快进”:
A-----B <-- misc (HEAD)
/ /
o--o--o--*--o--C <-- master, origin/master
现在,当我们
git merge master
或
*
6时, merge 基础将是我标记为
*
的提交。如果我们没有将密码从
B
更改为
*
,而他们将其密码从
C
更改为
A
,我们将接听他们的更改-但他们不再需要更改它,因为我们从不发送密码来提交
B
和
*
;我们将这些保留给我们自己。因此,密码不应从
C
更改为
master
,并且在进行新 merge 时将保留更改后的密码:
A-----B-----D <-- misc (HEAD)
/ / /
o--o--o--o--o--C <-- master, origin/master
稍后,我们将拾取更多提交,将它们 merge (快进)到
C
,并准备再次 merge :
A-----B-----D <-- misc (HEAD)
/ / /
o--o--o--o--o--C--o--o <-- master, origin/master
这次, merge 基础将是
misc
提交-这是
C
及其分支上最接近的提交-Git将diff
origin/master
与
D
进行比较。大概他们仍然不会更改密码,因为我们仍然没有给他们提交
git pull
。
master
,但是根据您的操作方式,无论如何您都可以使用它,尤其是对于
git commit --amend
。
git rebase
和
master
都是这样工作的。
origin/master
的尖端和
master
的尖端是相同的提交。一个区别是默认提交消息将更改:一个将说“merge 主文件”,而另一个将说“merge 原件/主文件”。 (Git的提交消息格式中有一些奇怪的东西,也将
.config
与其他所有东西都区别对待,但是我们可以忽略不计。这只是一个历史产物。)
config.default
并有一些代码,例如:
[ -f .config ] || cp config.default .config
在第一次运行时将默认配置设置为
.config
文件。然后,使用
.gitignore
中的ojit_code,它将永远不会放入存储库中,因此它将永远不会出现在任何提交中,并且您首先不会遇到这个问题。
关于Git应该显示没有 merge 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40097125/
我的Angular-Component位于一个flexbox(id =“log”)中。可以显示或隐藏flexbox。 我的组件内部有一个可滚动区域,用于显示日志消息。 (id =“message-li
我真的很困惑 有一个 phpinfo() 输出: MySQL 支持 启用 客户端 API 版本 5.5.40 MYSQL_MODULE_TYPE 外部 phpMyAdmin 显示: 服务器类型:Mar
我正在研究这个 fiddle : http://jsfiddle.net/cED6c/7/我想让按钮文本在单击时发生变化,我尝试使用以下代码: 但是,它不起作用。我应该如何实现这个?任何帮助都会很棒
我应该在“dogs_cats”中保存表“dogs”和“cats”各自的ID,当看到数据时显示狗和猫的名字。 我有这三个表: CREATE TABLE IF NOT EXISTS cats ( id
我有一个字符串返回到我的 View 之一,如下所示: $text = 'Lorem ipsum dolor ' 我正在尝试用 Blade 显示它: {{$text}} 但是,输出是原始字符串而不是渲染
我无法让我的链接(由图像表示,位于页面左侧)真正有效地显示一个 div(包含一个句子,位于中间)/单击链接时隐藏。 这是我的代码: Practice
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
最初我使用 Listview 来显示 oracle 结果,但是最近我不得不切换到 datagridview 来处理比 Listview 允许的更多的结果。然而,自从切换到数据网格后,我得到的结果越来越
我一直在尝试插入一个 Unicode 字符 ∇ 或 ▽,所以它显示在 Apache FOP 生成的 PDF 中。 这是我到目前为止所做的: 根据这个基本帮助 Apache XSL-FO Input,您
我正在使用 node v0.12.7 编写一个 nodeJS 应用程序。 我正在使用 pm2 v0.14.7 运行我的 nodejs 应用程序。 我的应用程序似乎有内存泄漏,因为它从我启动时的大约 1
好的,所以我有一些 jQuery 代码,如果从下拉菜单中选择了带有前缀 Blue 的项目,它会显示一个输入框。 代码: $(function() { $('#text1').hide();
当我试图检查 Chrome 中的 html 元素时,它显示的是 LESS 文件,而 Firefox 显示的是 CSS 文件。 (我正在使用 Bootstrap 框架) 如何在 Chrome 中查看 c
我是 Microsoft Bot Framework 的新手,我正在通过 youtube 视频 https://youtu.be/ynG6Muox81o 学习它并在 Ubuntu 上使用 python
我正在尝试转换从 mssql 生成的文件到 utf-8。当我打开他的输出 mssql在 Windows Server 2003 中使用 notepad++ 将文件识别为 UCS-2LE我使用 file
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试执行单击以打开/关闭一个 div 的功能。 这是基本的,但是,点击只显示 div,当我点击“关闭”时,没有任何反应。 $(".inscricao-email").click(function
假设我有 2 张卡片,屏幕上一次显示一张。我有一个按钮可以用其他卡片替换当前卡片。现在假设卡 1 上有一些数据,卡 2 上有一些数据,我不想破坏它们每个上的数据,或者我不想再次重建它们中的任何一个。
我正在使用 Eloquent Javascript 学习 Javascript。 我在 Firefox 控制台上编写了以下代码,但它返回:“ReferenceError:show() 未定义”为什么?
我正在使用 Symfony2 开发一个 web 项目,我使用 Sonata Admin 作为管理面板,一切正常,但我想要做的是,在 Sonata Admin 的仪表板菜单上,我需要显示隐藏一些菜单取决
我试图显示一个div,具体取决于从下拉列表中选择的内容。例如,如果用户从列表中选择“现金”显示现金div或用户从列表中选择“检查”显示现金div 我整理了样本,但样本不完整,需要接线 http://j
我是一名优秀的程序员,十分优秀!