- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
假设我是一个 repo 的维护者,我想从贡献者那里获取更改,有几个可能的工作流程:
cherry-pick
从远程(按顺序)每次提交。在这种情况下,git 将提交记录为与远程分支无关。 merge
分支, pull 入所有更改,并添加一个新的“冲突”提交(如果需要)。merge
分别(再次按顺序)从远程分支提交每个提交,允许为每个提交记录冲突,而不是将所有内容组合在一起。 rebase
(与 cherry-pick
选项相同?),但我的理解是这可能会给贡献者带来困惑。也许这消除了选项 1。在情况 2 和情况 3 中,git 记录了提交的分支历史,这与情况 1 不同。
使用所描述的cherry-pick
或merge
方法之间的优缺点是什么?我的理解是方法 2 是常态,但我觉得用单个“冲突” merge 解决大型提交并不是最干净的解决方案。
最佳答案
rebase
(和cherry-pick
)和merge
都有各自的优点和缺点。我在这里主张 merge
,但两者都值得理解。 (在此处查看替代的、争论不休的 answer 列举了首选 rebase
的情况。)
merge
优于 cherry-pick
和 rebase
有几个原因。
merge
工作流程。 rebase
往往被认为更高级。最好了解两者,但是不想成为版本控制专家的人(根据我的经验,这包括许多非常擅长他们所做的事情但不想花费额外时间的同事)有一个更容易的时间刚刚 merge 。即使 merge 繁重的工作流 rebase
和 cherry-pick
仍然对特定情况有用:
merge
的一个缺点是历史困惑。 rebase
防止一长串提交分散在您的历史记录中,就像您定期 merge 其他人的更改一样。这实际上是我使用它的主要目的。您要非常注意的是,永远不要 rebase
您与其他存储库共享的代码。一旦一个提交被push
ed,其他人可能已经在它上面提交了,rebase 充其量只会导致上面讨论的那种重复。在最坏的情况下,您最终可能会得到一个非常困惑的存储库和细微的错误,您需要很长时间才能找出这些错误。cherry-pick
可用于从您基本上决定丢弃的主题分支中抽取一小部分更改,但意识到其中有几个有用的部分。至于更喜欢 merge 许多更改而不是一个更改:它只是简单得多。一旦开始拥有大量变更集, merge 单个变更集会变得非常乏味。 git(以及 Mercurial 和 Bazaar)中的 merge 解决方案非常好。大多数时候,即使 merge 很长的分支,您也不会遇到重大问题。我通常一次 merge 所有内容,只有 如果 我遇到大量冲突,我才会备份并重新运行 merge 。即便如此,我还是大块地做。作为一个非常真实的例子,我有一个同事有 3 个月的 merge 更改,并且在 250000 行代码库中遇到了大约 9000 个冲突。我们所做的修复是一次进行一个月的 merge :冲突不会线性累积,分段进行会导致 远 少于 9000 个冲突。这仍然是很多工作,但不如一次提交一个那么多。
关于Git Cherry-pick 与 merge 工作流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1241720/
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
var urlsearch = "http://192.168.10.113:8080/collective-intellegence/StoreClicks?userid=" + userId +
我有一个非常奇怪的问题,过去两天一直让我抓狂。 我有一个我试图控制的串行设备(LS 100 光度计)。使用设置了正确参数的终端(白蚁),我可以发送命令(“MES”),然后是定界符(CR LF),然后我
我目前正试图让无需注册的 COM 使用 Excel 作为客户端,使用 .NET dll 作为服务器。目前,我只是试图让概念验证工作,但遇到了麻烦。 显然,当我使用 Excel 时,我不能简单地使用与可
我开发了简单的 REST API - https://github.com/pavelpetrcz/MandaysFigu - 我的问题是在本地主机上,WildFly 16 服务器的应用程序运行正常。
我遇到了奇怪的情况 - 从 Django shell 创建一些 Mongoengine 对象是成功的,但是从 Django View 创建相同的对象看起来成功,但 MongoDB 中没有出现任何数据。
我是 flask 的新手,只编写了一个相当简单的网络应用程序——没有数据库,只是一个航类搜索 API 的前端。一切正常,但为了提高我的技能,我正在尝试使用应用程序工厂和蓝图重构我的代码。让它与 pus
我的谷歌分析 JavaScript 事件在开发者控制台中运行得很好。 但是当从外部 js 文件包含在页面上时,它们根本不起作用。由于某种原因。 例如; 下面的内容将在包含在控制台中时运行。但当包含在单
这是一本名为“Node.js 8 the Right Way”的书中的任务。你可以在下面看到它: 这是我的解决方案: 'use strict'; const zmq = require('zeromq
我正在阅读文本行,并创建其独特单词的列表(在将它们小写之后)。我可以使它与 flatMap 一起工作,但不能使它与 map 的“子”流一起工作。 flatMap 看起来更简洁和“更好”,但为什么 di
我正在编写一些 PowerShell 脚本来进行一些构建自动化。我发现 here echo $? 根据前面的语句返回真或假。我刚刚发现 echo 是 Write-Output 的别名。 写主机 $?
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我将一个工作 View Controller 类从另一个项目复制到一个新项目中。我无法在新项目中加载 View 。在旧项目中我使用了presentModalViewController。在新版本中,我
我对 javascript 很陌生,所以很难看出我哪里出错了。由于某种原因,我的功能无法正常工作。任何帮助,将不胜感激。我尝试在外部 js 文件、头部/主体中使用它们,但似乎没有任何效果。错误要么出在
我正在尝试学习Flutter中的复选框。 问题是,当我想在Scaffold(body :)中使用复选框时,它正在工作。但我想在不同的地方使用它,例如ListView中的项目。 return Cente
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我有一个组合框,其中包含一个项目,比如“a”。我想调用该组合框的 Action 监听器,仅在手动选择项目“a”完成时才调用。我也尝试过 ItemStateChanged,但它的工作原理与 Action
你能看一下照片吗?现在,一步前我执行了 this.interrupt()。您可以看到 this.isInterrupted() 为 false。我仔细观察——“这个”没有改变。它具有相同的 ID (1
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我正在尝试在我的网站上设置一个联系表单,当有人点击发送时,就会运行一个作业,并在该作业中向所有管理员用户发送通知。不过,我在失败的工作表中不断收到此错误: Illuminate\Database\El
我是一名优秀的程序员,十分优秀!