我做了一个git commit
,但我没有推。我现在正在开发一个新的错误修复程序,它不应该触及与第一次提交相同的文件。
我是否可以提交此错误修复并git push
仅此提交?
答案 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
我认为这回答了这个问题,但如果没有,请告诉我!