我一个人在做项目(尽管其他人可能会使用这个 repo),并且有一段时间,我将所有提交都提交到master
分支中(提交被推送到 GitHub)。
但在这一点上,我决定master
分支变得过于杂乱,小提交,为了让事情看起来更漂亮,我想将我所有的提交历史移动到wip
分支中,然后只合并master
到新版本。
最终结果应该是wip
内容和提交历史与当前分支相同的master
分支,以及具有master
与当前分支相同内容的单个提交的wip
分支。
最安全的方法是什么?
我一个人在做项目(尽管其他人可能会使用这个 repo),并且有一段时间,我将所有提交都提交到master
分支中(提交被推送到 GitHub)。
但在这一点上,我决定master
分支变得过于杂乱,小提交,为了让事情看起来更漂亮,我想将我所有的提交历史移动到wip
分支中,然后只合并master
到新版本。
最终结果应该是wip
内容和提交历史与当前分支相同的master
分支,以及具有master
与当前分支相同内容的单个提交的wip
分支。
最安全的方法是什么?
您可以wip
从当前master
历史创建开始:
git switch -c wip master
从那里,您可以在分支上工作,然后在准备好时wip
合并。master
我也想清除主人的历史
然后,reset --hard
您master
可以执行较旧的提交,或者一直返回到第一个提交,并强制推送它(假设您已通知存储库的其他用户)。
一种方法是将当前master
分支重命名为wip
,然后创建一个新的空master
分支。然后可以将提交组从 复制到新master
分支wip
,并在新的master
.
# Rename the master branch to "wip" locally
git branch -m master wip
# Rename the remote master branch to "wip"
git push origin -d master
git push origin -u wip
# Check out a new, empty branch as master
git checkout --orphan master
git reset --hard
# Create a squashed commit matching the current state of wip
git checkout wip -- .
git add .
git commit
# Push the new master
git push origin -u master
使用分支移动选项在本地重命名分支:
git branch -m master wip
使用push deletewip
选项删除远程分支,然后使用push upstream选项添加与本地分支匹配的新远程分支:
git push origin -d master
git push origin -u wip
创建一个没有提交历史的新空分支。这是通过使用 checkout orphan选项创建一个孤立分支(没有任何提交的分支)来完成的。现有文件将保留(未提交),因此请使用reset hard选项删除它们:
git checkout --orphan master
git reset --hard
将分支的当前状态复制wip
到master
分支。首先,wip
使用checkout with pathspec选项和当前工作目录pathspec ( .
) 复制分支中的所有文件,以递归地包含当前工作目录中的所有文件。这些文件都使用带有当前工作目录路径规范的add with pathspec选项添加到索引中。最后,使用commit选项创建包含所有这些文件的单个提交:
git checkout wip -- .
git add .
git commit
最后,使用push upstream选项将新master
分支推送到原点:
git push origin -u master