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

6

我已经进行了一次git commit,但是我还没有推送。现在我正在修复一个新的bug,它不应该涉及到第一次提交时修改过的文件。

我是否可以提交这个bug修复,并仅git push这个提交?


7
您好,看起来您已经提出了50多个问题,但只有其中一小部分得到了采纳的答案。请考虑使用“采纳”功能,标记对您最有帮助的答案。 - Greg Hewgill
4个回答

7
所有提交到特定提交之前的提交都定义了新提交。
也就是说,如果你有一个主 → 开发 → bugfix 如下图所示: master → dev → bugfix http://img.skitch.com/20091029-tbffrg53q73mdipiwcr3g2ywuh.png 你可以推送 dev,但不能单独推送 bugfix,但是 bugfix 的定义包括 dev,因此没有 bugfixdev 就没有意义。
然而,如果你将这个 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

实际上,从分支开始进行错误修复通常会使这种操作变得更加容易。

6

您可以将上一个提交移动到(临时)分支中,并将新的提交选取到主分支。例如:

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

然后,temp_branch 将包含您的新提交。您随后可以将之前的提交拿回 master 分支:

git cherry-pick temp_branch^
git branch -D temp_branch

做完这个操作后,你的主分支将包含与开始时相同的两个提交,但顺序相反。

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

我认为这回答了问题,如果不是,请告诉我!


0

只需另外克隆一份并从那里推送您的错误修复即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接