Git保持远程分支(原点)清洁

时间:2016-12-12 14:59:52

标签: git

我正在按照http://nvie.com/posts/a-successful-git-branching-model/

的建议开展个人项目

我使用以下内容发布了我的代码的第1版:

git checkout master
git merge --no-ff release-1.0

进入我的主分支,然后发出:

git push

之后,我注意到远程分支(origin)拥有所有本地提交和分支,甚至是我认为是私有的。

我如何保留我的私人当地历史,并保持原产地"清洁"推后他们?似乎在我的本地仓库中保存代码的所有历史记录有很多价值,但如果我错了,请纠正我!

如果在推送后无法保留单独的历史记录,如何在不丢失值得保留的信息的情况下清理本地历史记录?

4 个答案:

答案 0 :(得分:2)

每当你在git上推送一些东西时,你的所有历史记录都会被推送到那一点。

但是,如果您想要稍微清理提交,最简单的方法是使用git rebase -i然后使用squashing提交。

所以,假设您刚刚做了一些小提交,并且想要从中提交一个更大的提交。

您的提交清单:

enter image description here

最后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.

如果我们再看一遍历史......

enter image description here

这是清理一些历史的最简单方法之一。

答案 1 :(得分:0)

提交的完整历史记录是提交的一部分,因此如果你推送提交,你将在遥控器上看到完全相同的东西。

要在推送前清理和整理您的历史记录,您可以查看enter image description here

答案 2 :(得分:0)

已经Sankalp Singha mentioned,您需要压缩您的提交。有一种简单的方法 - 使用以下方法将您的分支与私人历史合并:

git merge --squash <dev-branch>

这将创建一个新的提交,其中包含与dev-branch相同的数据,但不包含该分支的各个提交的列表。

答案 3 :(得分:0)

当你推动时,rebase答案是让你的工作提交不可见的好方法。

但是,您还希望将工作提交的记录保存在本地仓库中。

这样做的简单方法是在本地仓库上保留一个开发分支, 并为推送创建一个单独的分支。在推送之前重新启动单独的分支。