- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在我的电脑上开发代码,我的计算节点很少。
为了让我的程序保持同步,我决定使用 git。以前,我以一种单向模式使用它来“下推”从 PC 到计算节点的更改。但是时不时遇到计算节点特有的小bug,现场修复。与在 PC 上编写并提交可能会或可能不会修复所有问题的更改相比,测试和开发更容易。
我决定使用 git 实用程序将更改向上游发送回 main 代码库。
我编写了修复程序。在计算笔记上提交,使用git format-patch origin
。将补丁发送到我的 PC 并使用 git am
应用它。到目前为止,一切看起来都很甜蜜。
但是,当我在计算节点上使用 git pull
时,它再次从源中 pull 带有补丁的提交,并且 git log
显示两个具有相同评论和作者的提交。
我使用的命令有误,还是我的工作流程有缺陷?或者这是可以接受的? (不过我觉得不太好)。
在这两种情况下,我都在 master
分支上工作。
git pull
计算节点:
commit 68710f82ddb2b2f191a9c29f088423853032a851 <--- git pull enforced merge
Merge: ce19df4 609b82b
Author: luk32 <luk32@computing.node>
Date: Fri Dec 13 20:39:28 2013 +0100
Merge branch 'master' of PC:~/projects/_cmake
commit 609b82bc96f88da956869cec2953e8621cbdcd93 <--- 2nd git pull after git am
Author: luk32 <luk32@computing.node>
Date: Fri Dec 13 20:35:23 2013 +0100
Changed to worki with MathGL version 2. Broken version 1 compatibility!
commit ce19df4760519eaf42269461f7bdcf94b65bdc48 <--- on-site fix
Author: luk32 <luk32@computing.node>
Date: Fri Dec 13 20:35:23 2013 +0100
Changed to worki with MathGL version 2. Broken version 1 compatibility!
commit ccc5b8a1854e4ca4089cf4c0945baff990288557 <--- after previous git pull
Author: lukas <luk32@PC>
Date: Mon Jan 16 10:33:11 2012 +0100
skeleton changed to introduce project stacks
git log
在 PC 上看起来不错:
commit 609b82bc96f88da956869cec2953e8621cbdcd93
Author: luk32 <luk32@computring.node>
Date: Fri Dec 13 20:35:23 2013 +0100
Changed to worki with MathGL version 2. Broken version 1 compatibility!
commit ccc5b8a1854e4ca4089cf4c0945baff990288557
Author: lukasz kucharski <luk32@PC>
Date: Mon Jan 16 10:33:11 2012 +0100
skeleton changed to introduce project stacks
编辑:computing.node:~/projects/_cmake$ git log --decorate --graph --oneline master
* 68710f8 (HEAD, master) Merge branch 'master' of PC:~/projects/_cmake
|\
| * 609b82b (origin/master, origin/HEAD) Changed to work with MathGL version 2. Broken version 1 compatibility!
| * ccc5b8a skeleton changed to introduce project stacks
* | ce19df4 Changed to work with MathGL version 2. Broken version 1 compatibility!
|/
* 35d2eaa (origin/pushee) added eigen3 find module
* 39f4937 small bugfixes and slight changes in the reporting of what's going on
最佳答案
将补丁应用到 origin
之后,在运行 git pull
之前,您的历史记录如下所示:
* 609b82b (origin/master, origin/HEAD) Changed to work with MathGL version 2. Broken version 1 compatibility!
* ccc5b8a skeleton changed to introduce project stacks
* | ce19df4 (HEAD, master) Changed to work with MathGL version 2. Broken version 1 compatibility!
|/
* 35d2eaa (origin/pushee) added eigen3 find module
* 39f4937 small bugfixes and slight changes in the reporting of what's going on
您的第一个提交 ce19df4
将 35d2eaa
作为其父项。当您应用补丁时,您进行了第二次提交,609b82b
,将 ccc5b8a
作为其父级。因为他们有不同的 parent ,所以他们是不同的提交并且有不同的散列。提交的标识是
ccc5b8a
的更改)。format-patch
和 am
)。那么,git pull
是做什么的呢?我不会向新的 git 用户教授 pull
,因为它很容易混淆。这取决于您所在的分支,并且仅在将其设置为跟踪分支时才有效(master
可能是,但可能不是您的其他分支,除非您自己设置它们)。它做了两件事:
git fetch
相同)。git merge
相同)。如果您的本地分支设置为跟踪分支,它只知道尝试 merge 哪个分支。merge
令人困惑。它尝试进行快进 merge (read more here),但不能。因此,相反,它创建一个 merge 提交,将本地分支作为一个父级,将远程分支作为另一个父级,你会得到这个:
* 68710f8 (HEAD, master) Merge branch 'master' of PC:~/projects/_cmake
|\
| * 609b82b (origin/master, origin/HEAD) Changed to work with MathGL version 2. Broken version 1 compatibility!
| * ccc5b8a skeleton changed to introduce project stacks
* | ce19df4 Changed to work with MathGL version 2. Broken version 1 compatibility!
|/
* 35d2eaa (origin/pushee) added eigen3 find module
* 39f4937 small bugfixes and slight changes in the reporting of what's going on
虽然这对于 git merge
来说是合理的,但这不是您想要的。谁在乎您首先针对 35d2eaa
进行了提交?你真的只是想让 master
指向与 origin/master
相同的提交。您现在可以到达那里:
git checkout master
git stash # If you have any uncommitted changes
git reset --hard origin/master
git stash pop
然后您的历史记录将看起来像这样,就像您想要的那样。
* 609b82b (HEAD, master, origin/master, origin/HEAD) Changed to work with MathGL version 2. Broken version 1 compatibility!
* ccc5b8a skeleton changed to introduce project stacks
* 35d2eaa (origin/pushee) added eigen3 find module
* 39f4937 small bugfixes and slight changes in the reporting of what's going on
关于git - 在 `git format-patch` ,`git am` , `git pull` 之后在 git 历史中双重提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20594197/
我正在尝试使用 Android SDK 中的 Draw9Patch 工具,但在使用 Draw9Patch 打开我的图像后,它立即将我的所有图像区域显示为“坏补丁”。我手动绘制了定义可拉伸(stretc
我有一个运行补丁命令的构建工具,如果补丁命令返回非零值,它将导致构建失败。我正在应用一个可能已经或可能尚未应用的补丁,所以我使用 -N选项 patch ,它应该跳过。但是,当它确实跳过时,patch返
patching file chrome/browser/gpu_process_host_ui_shim.cc Unreversed patch detected! Skipping patch.
尝试查看哪些模型最适合api(更新少,但对象结构可能经常更改,高读取应用程序) 我有这样的资源 Epic(ID、名称、描述、开始日期、结束日期、状态、故事) 故事(ID、名称、说明、开始日期、结束日期
我创建了新问题,因为我觉得上一个问题已经得到解答,这属于一个新的地方。 我跑 bitbake core-image-minimal我收到以下错误: ERROR: systemd-1_232-r0 do
我正在使用 ColdFusion 10 与 PayPal 的服务器和 for some requests 进行通信我需要执行 HTTP PATCH 请求 are not supported by CF
我试图了解这两种模拟方法之间的区别。有人可以帮助区分它们吗?对于这个例子,我使用 passlib 库。 from passlib.context import CryptContext from un
WebTarget webTarget = httpClient.target(url); Invocation.Builder invocationBuilder = webTarget.reque
当提到“提交补丁”时,补丁这个词究竟是什么意思? 我已经看到它被大量使用,尤其是在开源世界中。它是什么意思,提交补丁到底涉及什么? 最佳答案 这是一个文件,其中列出了已更改的代码文件之间的差异。它通常
对于 matplotlib.patches,patch.contains_point(xy) 方法似乎与 patch.get_path().contains_point(xy) 不同,至少在拥有之后将
这是什么RFC 5789说: The PATCH method requests that a set of changes described in the request entity be ap
在 Draw 9-patch 中,一切看起来都很好。 但是,我的 SDK 说 9-patch png 格式不正确。因为我有类似 11-patch png 的东西。因为我不希望小抓取区域被缩放。如何让它
我创建了一个使用 javax.xml.ws.Endpoint 来创建 REST 端点的类: @WebServiceProvider @ServiceMode(value = javax.xml.ws.
语境 我有一个 spring boot (version 2.2.6.RELEASE) web 项目。 从这个 Web 应用程序(我称之为“APP1”)我想使用来自另一个 Web 应用程序的 PATC
在为我的应用程序编写单元测试时,我一直使用 @mock.patch 和 @patch.object 装饰器。但是现在,当我使用装饰器进行一些单元测试时,我收到错误消息“TypeError: stati
我在使用@mock.patch.object 函数时观察到 nosetests 的一个非常奇怪的行为: 当我同时运行多个测试时,我得到的结果与单独运行它们时不同。具体来说,在某些情况下,当我一起运行多
我正在使用 RestSharp v107。 我想更新测试用例的迭代路径。我可以使用 Postman 更新它,但使用 RestSharp 我收到“BAD Request”-“您必须在请求正文中传递有效的
我已经阅读了 GNU 项目中关于开源和其他许可证的文章。某些许可证允许您将更改发布为补丁,而不是完整的源代码(例如 Q 公共(public)许可证或 gnuplot 许可证)。这是什么意思?这样的补丁
有谁知道免费的优质补丁程序?您知道,可以将其中包含旧程序的目录放入其中,然后将其与具有新版本的目录进行比较,然后吐出一个补丁,这仅仅是两者之间的区别? 另外,我正在寻找可以修补整个目录的东西,而不仅仅
由于我当时一直在使用 Subversion 和 shell 工具,git-gui这些都是不可能的。是否有任何 shell 工具可以交互式地逐行应用补丁? 最佳答案 尝试通过 --dry-run选项 p
我是一名优秀的程序员,十分优秀!