我正在尝试重命名六个提交前以及所有后续提交中引入的目录。这些提交尚未被推送。
我尝试了什么?
git filter-branch命令mv old new,但之前提交失败,HEAD~6因为该目录不存在。git rebase -i HEAD~6编辑每个提交,但我无法使用,mv old new因为 git 锁定了文件,也无法在 Windows 资源管理器中重命名它。cp -R old new; rm -rf old; git add new但这会产生合并冲突HEAD~4。可能值得注意的是,引入此目录的提交是此分支中的第一个提交(该分支比 之前有六个提交),并且自从我分支出来以来master我还没有触及过。master
我也读过这个问题。
最好的方法是什么?
当想要修复旧提交中创建的错误时,您遇到的最佳实践是什么?
假设您有以下提交 A->B->C->D,并且您发现在提交 B 上添加了一个错误。
[编辑:A、B、C 和 D 已经发布(由其他人推送)]
你会回到 B 上将修复添加为新提交 B' 并合并并获得 E:
A->B->C->D->E
\->B'-----/
Run Code Online (Sandbox Code Playgroud)
或在 D 之后添加修复程序?
A->B->C->D->E
Run Code Online (Sandbox Code Playgroud)
Stackoverflow 建议我,这可能是一个愚蠢的问题,但重要的是要知道您尝试了哪些选项以及从中获得了哪些问题或好处。
我知道这个问题有数千条线索。
但我发现了一些非常奇怪的事情。
如果您在 GitHub 上创建项目,请进行一些提交。
假设提交 1、2、3、4、5。
后来,您意识到要将某些内容更改为提交 3。
由于您在自己的分支中工作,因此重写历史记录没有问题。
所以让我们这样做:(基于这个stackoverflow 答案)
git rebase --interactive 'bbc643cd^'
// Modify 'pick' to 'edit' into interactive prompt and :
git commit --all --amend --no-edit
git rebase --continue
git push -f
Run Code Online (Sandbox Code Playgroud)
伟大的!错误已更正。历史已被重写,因此bbc643cd现在提交lkqjfhchc。
您可以在 GitHub 上查看源代码,一切都会更新。
但还是有人可以在 GitHub 上找到它!
访问 URL: https: //github.com/your-nickname/your-project/commit/bbc643cd ...(完整提交哈希),您就会找到它!
我们怎样才能永久删除这个提交呢?
谢谢你的帮助!
我刚刚意识到我遗漏了一个文件,我本来应该添加到5提交的提交中.在提交消息中,我说该文件已包含在内,我不想做一个新的提交文本"哎呀忘了在提交#XXXXX中添加此文件"
编辑先前提交的最佳方法是什么,以便我可以添加文件?
我想删除在存储库中创建的所有提交的时间,尤其是时区信息。那可能吗?如果不是,是否可以简单地将时间00:00和时区设置为+0000?
(顺便说一句,我想保留日期。这只是我不想要的时间和时区。)
我只发现了关于更改所有提交的作者的问题,但没有发现关于仅更改所有提交中的属性以保留剩余信息的问题。
是的,我知道人们可以通过其他方式找到我住的地方等,但这对我来说已经足够了。
我有时会遇到一种情况,我需要修复一个不在分支尖端的提交中的一行代码.(它是从顶部的第二或第三).我当然可以将最后一次或两次提交放在某处,修改有问题的提交,然后将这两个提交放回顶部,如果它,但我想知道是否有一个单击解决方案
1) SourceTree
2) git command line
Run Code Online (Sandbox Code Playgroud)
因为我认为上面描述的整个hoopla-doopla有点乏味.
不言而喻,我在谈论私有代码,功能分支,没有任何东西被推送到神圣的企业存储库,所以改变历史根本不是问题.
任何帮助,想法?
如SO中这个流行的答案所示,当我需要编辑/更正最后一次提交的消息时,我这样做:
git commit --amend -m "New commit message"
Run Code Online (Sandbox Code Playgroud)
但是当我想修改最后一次提交之前的提交时,我该怎么做?例如,第14次最后一次提交 - 还考虑到提交尚未被推送到远程?
有没有办法在不重置以前的提交的情况下执行此操作?请问rebase在这种情况下,做正确的事?