假设您在处理功能分支时从远程存储库中提取数据,并将新提交添加到主分支中。
您完成功能分支上的工作,提交更改,然后将其合并/变基到主分支。功能提交插入到 master 分支的哪个位置,是在拉取的提交之前还是之后?如果您从未执行过拉动操作,它们会插入哪里?会得到同样的结果吗?
另外,如果将 master 合并/变基到功能分支而不是相反,会发生什么?如果您在拉取之前或之后合并/变基,master 会插入到功能分支的哪里?会得到同样的结果吗?它的历史看起来与前面提到的将功能合并/变基到主版本中会有什么不同吗?
更简洁地说,合并的方向和/或合并的顺序是否会对合并结果产生不同的结果?我怀疑这并不重要。
旁白:对于使用 Git 的人来说,这个问题可能很容易回答,但是有数百甚至数千的文档和教程资源,我从未见过它被直接解决。如果不知道答案,Git 可能会非常难以理解。
因为操作顺序在某些 Git 概念和一般编程中很重要,所以它可能会导致某人得出这样的结论:它会产生影响。此外,我们通常倾向于认为修订是按时间顺序发生的,并期望 Git 也以同样的方式工作。用户界面和命令行也通过暗示操作顺序来体现这种看法。
其他版本跟踪工具在抽象这种认知腐蚀性操作方面做得更好。
就在我以为Git不再复杂的时候,我才发现git worktree。这是我不知道的子树或功能的代名词。工作树与子树相同还是不同?如果它们不同,它们又如何不同,工作树将解决什么问题?
好.我最终试图找出为什么我不能将两个提交合并为一个.Git非常复杂.我有一系列在本地和远程看起来像这样的提交:
commit 6abb264c06b06d42ea7e07a469107b9d3d72dffa
Author: XXXX <xxx@xxxx.xxx>
Date: Thu Jan 23 15:59:03 2014 -0500
First Check-in again (forgot to add project file and forgot to tick off append to last commit)
commit 90b2468f5267a471d52f2d7cc7cb1cd8604b3b86
Author: XXXX <xxx@xxxx.xxx>
Date: Wed Jan 22 22:57:20 2014 -0500
First check-in
Run Code Online (Sandbox Code Playgroud)
我想将它们组合在一起,看起来像这样:
commit 90b2468f5267a471d52f2d7cc7cb1cd8604b3b86
Author: XXXX <xxx@xxxx.xxx>
Date: Wed Jan 22 22:57:20 2014 -0500
First check-in
Run Code Online (Sandbox Code Playgroud)
我尝试使用pick,squash和任何可用的葫芦命名无效.它告诉我它已经压缩/合并/挑选了什么,但我总是看到两个提交而不是一个.
也无法弄清楚挑选和壁球之间的区别.另外,我无法分辨提交和分支之间的区别.而且,我读到一个分支只是一个提交,但为什么我们必须合并分支但是选择/压缩(??)提交?这非常令人困惑.
我有一个for循环遍历一个对象向量.如果一个对象不满足条件,我想通过循环重复相同的对象,直到它满足条件.
int TrainDog(const vector<Dog> &dogs, const Cat big_cat) {
for (auto const dog : dogs) {
dog->Sit(); // tell the dog to sit
if (!dog->IsBarking()) // if dog isn't barking
dog->Eat(raw_burger); // then reward dog
else { // else
dog->PlayWith(big_cat); // punish dog
??? // and train again ???
big_cat++; // with bigger cat
}
}
}
Run Code Online (Sandbox Code Playgroud)
我宁愿保留这个干净的迭代器,而不是使用传统的索引变量语法.
git ×3
c++ ×1
c++11 ×1
for-loop ×1
git-commit ×1
git-merge ×1
git-rebase ×1
git-worktree ×1
github ×1
rebase ×1
subtree ×1