问题标签 [git-history-rewrite]
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 提交?
我有一个看起来像这样的 git 存储库:
我想在分支历史记录中移动常见的提交C
和D
更早的位置,main
以便 repo 看起来像这样:
需要注意的是C
//和C'
//提交对代码的修改是相同的,但是由于在不同的分支中,它们都有不同的提交哈希。C''
D
D'
D''
git - 强制推送基础分支后如何更新我的功能分支。我们只使用变基,禁止合并
我们在 git 中使用了一个非常简单的结构。
首先我们有我们的master
分支。
下面我们有develop
最后我们可以有任何feature
分支
我们只使用 rebase 来更新我们分支的历史记录,然后 f-forwarding 到上面的分支。
每周,我们的develop
分支都更新了一些features
. 并且这个分支被重新定位并合并到 master (从develop
to master
)。
问题
当我们变基并合并develop
到 时,有时会出现冲突,我必须通过在我的分支中master
执行master
变基来修复它们。develop
修复冲突后,我执行git push --force-with-lease
将更改上传到远程。
在这个过程之后,发展的历史因为力推而改变。
当另一个开发人员正在feature
基于强制推送之前的分支develop
(强制推送develop
之前)处理一个分支时,问题就存在了。
我们如何feature
用新的分支历史更新这个开发者的develop
分支。因为,git rebase develop
在我们的feature
分支里面做的时候。我们最终会发生很多冲突。
git - 安全地替换 git 历史记录中的文件 (LICENSE.md)
我有一个托管在 GitHub 上的存储库,我想用git 历史记录中的LICENSE
另一个文件替换我的文件。LICENSE
原始LICENSE
文件是在存储库的第一次提交中添加的。
尽管目前没有太多积极的开发活动,但我和一个队友的 repo 已经公开了 PR。
如何安全地LICENSE
替换我的 git 存储库历史记录中的文件?
我读到在用其他分支重写历史时可能会出现问题,因为当强制将更改的历史记录到上游时,它们依赖于不再存在的引用。
理想情况下,我希望所有上游分支仍然“工作”,即我应该能够在重写历史记录后将它们与正确的差异合并。
我可能不必关注没有被推向上游的其他同事的本地分支机构。最好不要破坏它们,但这并不重要。
我看到git filter-branch
git filter-repo
现在应该使用而不是。只要它安全地工作,任何解决方案对我来说都可以,尽管我也会对“最佳实践”解决方案感兴趣;)
git - 如何创建一个回滚另一个提交的提交?
为简单起见,让我们创建一个只有两个提交的存储库:
为清楚起见,此时git log --oneline
返回
我想要得到的是以下内容
with somefile
inthird
具有与 in 相同的somefile
内容first
。
我当然可以做git cherry-pick master~
(这里master
是fd5b1ce
)并完全解决冲突first
,但也许有更清洁的方法?
git - git 二阶历史
在处理补丁时,我希望提供一组干净的提交。因此,我经常发现自己在提交集干净并准备好合并之前反复重写历史记录。
在这个过程中,在收到审稿人的意见后,我会回去rebase -i
修复我的代码,修复提交消息等。每次创建一个新的修订提交来替换之前的提交。先前的提交仍然存在,但不再是修订历史的一部分。
经过几次历史重写迭代后,我终于得到了一个干净的修订提交集,我可以推送或转换为补丁集。但现在我有时喜欢回顾一下我对一个或一组提交所做的更改历史,看看我在这个历史重写过程中做了什么。
我可以手动跟踪它——在某个地方写下我正在编辑的每个提交的提交哈希,然后再重写它。这样我可以回顾历史重写的历史,但这很乏味且容易出错。
有没有办法自动化这个,让 git 自己跟踪“二阶”历史——历史重写的历史?获取一个git log'
提交,以显示历史上为生成该提交而执行的所有“修改”操作?