gpt4 book ai didi

git - 'reshape' 分支历史的安全方法

转载 作者:太空狗 更新时间:2023-10-29 13:40:28 26 4
gpt4 key购买 nike

通常,在使用 git 时,我会犯下 rebase 或 merge 我并不真正想要的东西的错误。例如,假设我有三个最初不想在历史记录中显示的提交,还有一个我想要显示的提交,例如 A-B-C-D,其中 D 是提交我想。所以我跑

git rebase -i HEAD~4

然后我压扁 ABC。但是,后来,我决定我实际上想要有两个提交,因为 A 与其他三个完全无关,如果它是独立的,历史会更有意义。我现在要做的是,

git reflog | grep 'rebase -i' 

这会吐出一些以

结尾的列表
<someHash> HEAD@{<num>}: rebase -i (start): checkout HEAD~4

然后我会运行

git checkout HEAD@{<num>+1}
git br -D <branchIWasWorkingOn>
git checkout -b <branchIWasWorkingOn>
git rebase -i HEAD~4

并做我之前做的完全相同的事情,但这次也是picking commit A。这真的很麻烦,并且需要删除分支,这让我担心这个工作流程不是特别安全。我的问题是,是否有比这种 reflog & branch deletion 方法更安全的重写历史的方法?

最佳答案

如果有必要,我最喜欢的拆分提交的方法是简单地 git reset --soft HEAD~1 这将把最后一次提交的所有更改(在您的情况下是 4 个 merge 提交)带到暂存区区域。从那里您可以根据需要重新提交它们。因此,基本流程应该是像这样的提交 A-B-C-D,其中 D 是您想要拆分的多个提交。运行 git reset --soft HEAD~1 并且您将在暂存区中拥有 A-B-CD 的更改。提交任意多次的独立时间,只要你愿意说两次,你就会得到 A-B-C-E-F

现在,如果提交在您的 HEAD 顶部,那就太好了。但是如果你需要返回几个提交,你仍然需要创建一个分支,git reset --hard HEAD~n 来删除额外的提交(不用担心它们在其他分支)。然后运行 ​​git reset --soft HEAD~1。一旦你重新提交了你想要的任何东西,你就可以将你原来的分支从这个分支上重新定位到你想去的地方。

我不能说它比你的方法更干净,可能更容易一些。对我来说,至少更容易想象正在发生的事情。话虽这么说,如果你要重写历史,它会有点困惑。一定要慢慢来,注意什么时候会被删除。

此外,作为一个很好的旁注,事实证明即使将提交从分支中 rebase 也不会使它们消失。 Git 缓存一切。所以我删除了一个我以前不应该拥有的提交,但是因为我通过在终端中向上滚动知道了提交哈希,所以我能够将它重新选中。因此,当您删除某些内容时,并非所有内容都会丢失。

关于git - 'reshape' 分支历史的安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31407183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com