2

我一个人在做项目(尽管其他人可能会使用这个 repo),并且有一段时间,我将所有提交都提交到master分支中(提交被推送到 GitHub)。

但在这一点上,我决定master分支变得过于杂乱,小提交,为了让事情看起来更漂亮,我想将我所有的提交历史移动到wip分支中,然后只合并master到新版本。

最终结果应该是wip内容和提交历史与当前分支相同的master分支,以及具有master与当前分支相同内容的单个提交的wip分支。

最安全的方法是什么?

4

2 回答 2

3

您可以wip从当前master历史创建开始:

git switch -c wip master

从那里,您可以在分支上工作,然后在准备好时wip合并。master

我也想清除主人的历史

然后,reset --hardmaster可以执行较旧的提交,或者一直返回到第一个提交,并强制推送它(假设您已通知存储库的其他用户)。

于 2021-06-27T06:26:49.010 回答
1

一种方法是将当前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

将分支的当前状态复制wipmaster分支。首先,wip使用checkout with pathspec选项和当前工作目录pathspec ( .) 复制分支中的所有文件,以递归地包含当前工作目录中的所有文件。这些文件都使用带有当前工作目录路径规范的add with pathspec选项添加到索引中。最后,使用commit选项创建包含所有这些文件的单个提交:

git checkout wip -- .
git add .
git commit

最后,使用push upstream选项将新master分支推送到原点:

git push origin -u master
于 2021-06-27T06:58:08.777 回答