创建没有commit提交历史的新分支

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建没有commit提交历史的新分支相关的知识,希望对你有一定的参考价值。

参考技术A 项目提交历史记录那么长,通常git branch name创建新分支的时候会带着密密麻麻的历史提交记录,看的头皮发麻。整理了如何创建没有历史commit的新分支。

完活...

如何使用git移动历史commit(当你提交到错误的 Git 分支时该怎么办)

翻译自: 当你提交到错误的 Git 分支时该怎么办(What to do when you commit to the wrong Git branch.)

1. 故事背景

某日你正在享受编码的美好时光,并且作为一个优秀程序员,你总会定期commit
然后你突然发现最近的几次提交,都到了错误的分支。现在怎么办?
这就是我们正在将要谈的Git,好消息是处理起来并不很难

假设你提交到了 master,但是其实你原本打算提交到名为myfeature的新分支,那么有两件事需要修复。首先,你需要将 master 恢复到原来的位置。其次,你需要在新分支上进行更新commit

现在你有两个选择:

  • 撤消master上的提交,checkout到新分支myfeature并将所有更改作为一个整体的commit提交
  • 手动修改 refs 以使 master 指向你所在的位置,以及新分支 ref 的位置。

第一个解决方案很好,简单且易于应用,有相对较小的犯错空军。然而缺点是不会在新分支上获得原始提交消息,并且所有更改都作为一条带有新提交消息的单个commit提交

第二种解决方案更加合理。然而,这意味着你所有的提交都被传递到新的分支。当然,你应该在推送到中央仓库之前检查结果,因此会比较容易出错

2. 处理方法

2.1 撤消并提交到新分支

确保你在一直提交的分支上。使用 git log 检查您要回滚的提交次数。然后使用 git reset HEAD~N 撤消提交,其中“N”是您要撤消的提交数。

例如,要撤消一个提交:

git reset HEAD~1

然后创建一个新分支并checkout(签出),再次add(添加)并commit(提交)您的更改。

git checkout -b newbranch
git add -A
git commit -m "Committed on new branch"

请注意,使用git add -A时,可能会添加不相关的未提交文件和目录。建议在提交检查之前使用git status 查看

2.2 将commits移至另一个分支

为了获得更大的错误余地。第一步是记下想要成为新分支头结点的commit的 commit id

git log

commit id复制到一个安全的地方

然后通过一次commit(或者无论多少次您需要退回的commit)重置您当前的分支:

git reset --hard HEAD~1

最后一步是将随后的提交移动到新分支:

git checkout -b newbranch
git reset --hard < commit_id >

已经完成了!现在是时候推送两个分支了(如果需要,使用 --force,即如果您之前推送了更改). 但是,与往常一样,使用 --force 时请确保没有其他commit跟随您的commit,因为有的话它们将被覆盖掉

以上是关于创建没有commit提交历史的新分支的主要内容,如果未能解决你的问题,请参考以下文章

如何使用git移动历史commit(当你提交到错误的 Git 分支时该怎么办)

如何使用git移动历史commit(当你提交到错误的 Git 分支时该怎么办)

如何使用git移动历史commit(当你提交到错误的 Git 分支时该怎么办)

如何使用git移动历史commit(当你提交到错误的 Git 分支时该怎么办)

git 回滚到某次历史,修改后创建新分支(原来分支不删除)

Git commit 提交没有被远端分支合并,撤销本次commit