如何在没有早期提交的情况下推送一个Git提交?

时间:2009-10-28 21:42:15

标签: git

我做了一个git commit,但我没有推。我现在正在开发一个新的错误修复程序,它不应该触及与第一次提交相同的文件。

我是否可以提交此错误修复并git push仅此提交?

4 个答案:

答案 0 :(得分:7)

导致特定提交的所有提交都是定义新提交的内容。

也就是说,如果你有一个master→dev→bugfix,如下图所示:

master → dev → bugfix http://img.skitch.com/20091029-tbffrg53q73mdipiwcr3g2ywuh.png

你可以单独推dev而不是bugfix,但bugfix的定义包括dev,所以dev没有bugfix没有意义}}

但是,如果你将这个错误修正作为一个功能分支构建,你会看到更像这样的东西:

feature branch http://img.skitch.com/20091029-t3w5qk3bhj3ftx1d9xnk32ibkb.png

你仍然可以追溯性地执行该操作(从origin/master创建一个新分支,挑选更改,然后在开发分支上git reset --hard HEAD^以获取错误修正。)

完成后,您可以使用简单的git rebase master转发dev分支,它看起来像这样:

new master http://img.skitch.com/20091029-1ts3enwsmsr29imcu7tyk75ett.png

在实践中,从分支开始修复错误会使这种事情变得更容易。

答案 1 :(得分:6)

您可以做的是将先前的提交移动到(临时)分支,然后挑选您对主服务器的新提交。例如:

# first commit your current work
git branch temp_branch
git reset --hard HEAD~2
git cherry-pick temp_branch
git push

然后,temp_branch将包含您的新提交。然后,您可以稍后将您之前的那个选回主人:

git cherry-pick temp_branch^
git branch -D temp_branch

执行此操作后,您的主分支将包含与您开始时相同的两个提交,但顺序相反。

答案 2 :(得分:0)

再做一次克隆并从那里推送你的bug修复。

答案 3 :(得分:0)

我们的商店广泛使用个人分支机构。基本上这个过程会是这样的:

鉴于您目前在主分支

git checkout -b bug_fix_name_that_I_dont_want_to_commit

上面创建了一个分支并将其检出...这是您放置未准备推送的提交的地方。

现在您应该能够在不影响主分支的情况下提交当前分支。

当您准备发布/推送一个提交时,只需执行:

git push origin master

并且您的其他提交不会转到原始存储库。

当您准备将“错误修复”合并到主分支中时,请检查主分支并执行;

git merge bug_fix_name_that_I_dont_want_to_commit

我认为这回答了这个问题,但如果没有,请告诉我!