我正在按照http://nvie.com/posts/a-successful-git-branching-model/
的建议开展个人项目我使用以下内容发布了我的代码的第1版:
git checkout master
git merge --no-ff release-1.0
进入我的主分支,然后发出:
git push
之后,我注意到远程分支(origin)拥有所有本地提交和分支,甚至是我认为是私有的。
我如何保留我的私人当地历史,并保持原产地"清洁"推后他们?似乎在我的本地仓库中保存代码的所有历史记录有很多价值,但如果我错了,请纠正我!
如果在推送后无法保留单独的历史记录,如何在不丢失值得保留的信息的情况下清理本地历史记录?
答案 0 :(得分:2)
每当你在git上推送一些东西时,你的所有历史记录都会被推送到那一点。
但是,如果您想要稍微清理提交,最简单的方法是使用git rebase -i
然后使用squashing
提交。
所以,假设您刚刚做了一些小提交,并且想要从中提交一个更大的提交。
您的提交清单:
最后4次提交如果将它们组合在一起会更快乐,所以让我们通过交互式变基来做到这一点:
$ git rebase -i HEAD~4
pick 01d1124 Adding license
pick 6340aaa Moving license into its own file
pick ebfd367 Jekyll has become self-aware.
pick 30e0ccb Changed the tagline in the binary, too.
# Rebase 60709da..30e0ccb onto 60709da
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
你可以从这个屏幕上找到很多选项,但是现在我们只是将所有内容压缩到一个提交中。因此,将文件的前四行更改为此可以解决问题:
pick 01d1124 Adding license
squash 6340aaa Moving license into its own file
squash ebfd367 Jekyll has become self-aware.
squash 30e0ccb Changed the tagline in the binary, too.
基本上,这告诉Git将所有四个提交合并到列表中的第一个提交中。完成并保存后,会弹出另一个编辑器,其中包含以下内容:
# This is a combination of 4 commits.
# The first commit's message is:
Adding license
# This is the 2nd commit message:
Moving license into its own file
# This is the 3rd commit message:
Jekyll has become self-aware.
# This is the 4th commit message:
Changed the tagline in the binary, too.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i nor -o; assuming --only paths...
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: LICENSE
# modified: README.textile
# modified: Rakefile
# modified: bin/jekyll
#
Git允许您根据流程中涉及的其他提交修改新提交的消息。根据需要编辑邮件,然后保存并退出。
Created commit 0fc4eea: Creating license file, and making jekyll self-aware.
4 files changed, 27 insertions(+), 30 deletions(-)
create mode 100644 LICENSE
Successfully rebased and updated refs/heads/master.
如果我们再看一遍历史......
这是清理一些历史的最简单方法之一。
答案 1 :(得分:0)
答案 2 :(得分:0)
已经Sankalp Singha mentioned,您需要压缩您的提交。有一种简单的方法 - 使用以下方法将您的分支与私人历史合并:
git merge --squash <dev-branch>
这将创建一个新的提交,其中包含与dev-branch
相同的数据,但不包含该分支的各个提交的列表。
答案 3 :(得分:0)
当你推动时,rebase答案是让你的工作提交不可见的好方法。
但是,您还希望将工作提交的记录保存在本地仓库中。
这样做的简单方法是在本地仓库上保留一个开发分支, 并为推送创建一个单独的分支。在推送之前重新启动单独的分支。