问题标签 [git-merge]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 当我所做的只是压缩提交时,为什么 git-rebase 会给我合并冲突?
我们有一个包含 400 多个提交的 Git 存储库,其中前几十个是大量的反复试验。我们希望通过将许多提交压缩成一个提交来清理这些提交。自然, git-rebase 似乎是要走的路。我的问题是它最终会出现合并冲突,而这些冲突并不容易解决。我不明白为什么会有任何冲突,因为我只是在压缩提交(而不是删除或重新排列)。很可能,这表明我并不完全理解 git-rebase 是如何进行压缩的。
这是我正在使用的脚本的修改版本:
repo_squash.sh(这是实际运行的脚本):
repo_squash_helper.sh(此脚本仅供 repo_squash.sh 使用):
repo_squash_list.txt:(此文件仅供 repo_squash_helper.sh 使用)
我将把“新消息”的内容留给你想象。最初,我在没有“--strategy theirs”选项的情况下执行此操作(即,使用默认策略,如果我正确理解文档是递归的,但我不确定使用哪种递归策略),它也没有不工作。另外,我应该指出,使用 repo_squash_helper.sh 中注释掉的代码,我保存了 sed 脚本工作的原始文件并针对它运行 sed 脚本以确保它正在做我想要它做的事情(它是)。同样,我什至不知道为什么会发生冲突,所以使用哪种策略似乎并不重要。任何建议或见解都会有所帮助,但大多数情况下我只是想让这个挤压工作。
更新了与 Jefromi 讨论的额外信息:
在处理我们庞大的“真实”存储库之前,我在测试存储库上使用了类似的脚本。这是一个非常简单的存储库,并且测试运行良好。
失败时我收到的消息是:
这是第一次壁球提交后的第一个选择。运行会git status
产生一个干净的工作目录。如果我然后执行 a git rebase --continue
,我会在多次提交后收到非常相似的消息。如果我再做一次,我会在几十次提交后得到另一个非常相似的消息。如果我再做一次,这次它会经历大约一百次提交,并产生以下消息:
如果我然后运行git status
,我得到:
“两个修改”位对我来说听起来很奇怪,因为这只是一个选择的结果。还值得注意的是,如果我查看“冲突”,它可以归结为一行,其中一个版本以 [tab] 字符开头,另一个版本以四个空格开头。这听起来可能是我如何设置配置文件的问题,但其中没有任何问题。(我确实注意到 core.ignorecase 设置为 true,但显然 git-clone 是自动完成的。考虑到原始源位于 Windows 机器上,我对此并不完全感到惊讶。)
如果我手动修复file_X.cpp,它会在不久之后因另一个冲突而失败,这次是在一个版本认为应该存在的文件(CMakeLists.txt)和一个版本认为不应该存在的文件(CMakeLists.txt)之间。如果我通过说我确实想要这个文件(我确实想要)来解决这个冲突,那么稍后我会遇到另一个冲突(在同一个文件中),现在有一些相当重要的更改。它仍然只完成了大约 25% 的冲突。
我还应该指出,因为这可能非常重要,所以这个项目是从一个 svn 存储库开始的。最初的历史很可能是从那个 svn 存储库中导入的。
更新#2:
在百灵鸟(受 Jefromi 评论的影响)上,我决定将我的 repo_squash.sh 更改为:
然后,我按原样接受了原始条目。即,“变基”不应该改变任何事情。它最终得到了与前面描述的相同的结果。
更新#3:
或者,如果我省略该策略并将最后一个命令替换为:
我不再遇到“无事可做”的变基问题,但我仍然面临其他冲突。
使用重新创建问题的玩具存储库进行更新:
test_squash.sh(这是您实际运行的文件):
test_squash_helper.sh(由 test_sqash.sh 使用):
PS:是的,当你看到我使用 emacs 作为后备编辑器时,我知道你们中的一些人会畏缩。
PPS:我们确实知道在 rebase 之后我们将不得不删除现有存储库的所有克隆。(按照“发布后您不应重新设置存储库”的思路。)
PPPS:谁能告诉我如何为此添加赏金?无论我处于编辑模式还是查看模式,我都没有在此屏幕上的任何地方看到该选项。
git - 如何自定义 git 的合并提交消息?
每次我进行合并时,我都需要生成一个合并提交,并且我希望它不仅仅是所有提交的摘要。
我的问题是如何格式化 git-fmt-merge-msg 或什么决定了这条自动消息(我可以在提交后通过修改它并使用 git-log --pretty=format:'...' 手动执行此操作)
例如,我想将其格式化为:
git - 如何解决 git status “未合并的路径:”?
我将分支合并dog
到animal
. 当我去提交时,我得到以下信息:
我在每个分支中都有不同的目录名和文件名。该animal
分支具有我想要的更改。
当我去重置头部时,它不起作用。当我去采取任何其他 git 操作(删除、结帐等)时,我得到一个path not found
错误。
我需要执行什么命令来解决这个问题?
git - 在不使用结帐的情况下合并、更新和拉取 Git 分支
我在一个有 2 个分支 A 和 B 的项目上工作。我通常在分支 A 上工作,并合并来自分支 B 的东西。对于合并,我通常会这样做:
但是,我还想保留分支 B 的本地副本,因为我可能偶尔会在没有先与分支 A 合并的情况下签出分支。为此,我会这样做:
有没有办法在一个命令中完成上述操作,而不必来回切换分支?我应该为此使用git update-ref
吗?如何?
git - 使用 git 如何合并已经合并的存储库?
我有一个我提取更改的存储库,所以现在它与远程存储库是最新的。除了现在我意识到我需要拉出所有的存储库更改并且不保留我的。我想回到历史,这样当我拉动时我不会得到“已经是最新的”。还有第二部分,我怎样才能拉动并获取他们所有的更改而不保留我的所有更改?
git - Git Merge Recursive Ours - 命令语法示例
git merge 与我们的递归策略的正确格式是什么?(不要与 git merge ours 策略混淆)
http://www.kernel.org/pub/software/scm/git/docs/git-merge.html
我尝试了很多方法,但似乎不起作用。
git - 需要 master 不断合并到它的 git 分支的最佳实践是什么?
我正在开发一个基本上有 2 个分支的项目:master 和“next-version”。
两者都在不断变化,下一个版本需要从 master 获得最新的变化,但我不能把它们都合并,因为一个版本已经发布,另一个版本还在 alpha 上。
目前,每次发生更改时,我都会将 master 合并到下一个版本,但这会导致丑陋的历史。
在这种情况下,最佳做法是什么?
git - Git 合并 - 微不足道的合并?
如果 base 和 source 具有相同的文件内容,并且目标分支/repo 有一些其他文件更改,它保留哪些内容,源文件还是目标文件?
详细解释
假设在 A->B 边缘添加了一个文件,然后在 B->C 中再次删除了该文件,而在 B->D 边缘单独保留了该文件。
我们想合并 C 和 D。
如果在合并 C 和 D 时共同祖先是没有变化的 A(所以 A,C 没有文件,B,D 有文件)。
如果 C(目的地)从 D 合并会发生什么?
如果 D(目的地)从 C 合并会发生什么?
git - 判断 Git 提交是否是合并/恢复提交
我正在编写一个脚本,需要检查特定提交是否是合并/恢复提交,我想知道是否有一个 git 技巧。
到目前为止我想出的(我绝对不想依赖这里的提交消息)是检查HASH^2
我是否没有收到错误,有没有更好的方法?
git - 解决 git 中“琐碎冲突”的工具
你知道 git 命令的任何工具/开关可以帮助我防止冲突或加速合并吗?
目前我经常遇到这样的“琐碎冲突”:
我想这是由一些空白引起的。这很容易由人类解决,但是需要大量时间来解决所有这些冲突。
有没有可以自动解决此类冲突的工具?
PS。我仍在学习英语,但有时我会犯愚蠢的错误。我正在尽我所能,用英语写问题和答案,但是如果你能编辑我的帖子以防出现任何错误,我会非常高兴。我保证,你的努力不会白费。