当前位置:  开发笔记 > 编程语言 > 正文

你怎么只推动你的一些本地git提交?

如何解决《你怎么只推动你的一些本地git提交?》经验,为你挑选了4个好方法。

假设我有5个本地提交.我想只将其中的2个推送到集中式仓库(使用SVN风格的工作流程).我该怎么做呢?

这不起作用:

git checkout HEAD~3  #set head to three commits ago
git push #attempt push from that head

最终推动所有5个本地提交.

我想我可以执行git reset来实际撤消我的提交,然后是git stash然后是git push - 但我已经编写了提交消息并组织了文件,我不想重做它们.

我的感觉是,推送或重置的一些标志会起作用.

如果它有帮助,这是我的git配置

[ramanujan:~/myrepo/.git]$cat config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = ssh://server/git/myrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

Ryan Graham.. 177

假设您的提交位于主分支上,并且您希望将它们推送到远程主分支:

$ git push origin master~3:master

如果您使用的是git-svn:

$ git svn dcommit master~3

在git-svn的情况下,你也可以使用HEAD~3,因为它期望提交.在直接git的情况下,您需要使用分支名称,因为在refspec中未正确评估HEAD.

您还可以采取更长的方法:

$ git checkout -b tocommit HEAD~3
$ git push origin tocommit:master

如果你养成这种工作流程的习惯,你应该考虑在一个单独的分支中完成你的工作.然后你可以这样做:

$ git checkout master
$ git merge working~3
$ git push origin master:master

请注意,"origin master:master"部分可能是您的设置的可选项.



1> Ryan Graham..:

假设您的提交位于主分支上,并且您希望将它们推送到远程主分支:

$ git push origin master~3:master

如果您使用的是git-svn:

$ git svn dcommit master~3

在git-svn的情况下,你也可以使用HEAD~3,因为它期望提交.在直接git的情况下,您需要使用分支名称,因为在refspec中未正确评估HEAD.

您还可以采取更长的方法:

$ git checkout -b tocommit HEAD~3
$ git push origin tocommit:master

如果你养成这种工作流程的习惯,你应该考虑在一个单独的分支中完成你的工作.然后你可以这样做:

$ git checkout master
$ git merge working~3
$ git push origin master:master

请注意,"origin master:master"部分可能是您的设置的可选项.


注意:你不必使用`master~3`.对所需"up to"提交的任何引用都同样有效,例如`HEAD~3`或`HEAD ~~~`,或特定的SHA,或标记提交的标记.

2> Greg Hewgill..:

我所做的是在一个名为"work"的本地分支上工作.此分支包含我不打算推​​送到上游存储库的所有临时提交(如变通办法或私有构建选项或其他).我的工作走在那个分支,然后当我要提交我切换到主分支,樱桃挑选适当的承诺,我希望提交,然后按主.

在将更改从上游拉到我的主分支之后,我git checkout workgit rebase master.这会将我所有的本地更改重写为历史记录的末尾.

我实际上正在使用git svn这个工作流程,因此我的"推送"操作涉及到git svn dcommit.我还使用tig了一个很好的文本模式gui存储库查看器,来挑选适当的提交来掌握.



3> Thomas Leona..:

默认情况下,git-push会推送所有分支.当你这样做:

 git checkout HEAD~3  #set head to three commits ago
 git push #attempt push from that head

您移动到分离的HEAD(您不在任何分支上),然后将所有分支(包括本地主服务器(它仍然在原处))推送到远程主服务器.

手动解决方案是:

 git push origin HEAD:master

如果您发现推送所有分支的默认行为令人困惑(并且危险!),请将其添加到〜/ .gitconfig:

 [remote.origin]
    push = HEAD

然后只推动你所在的分支.在您的示例(一个分离的头)中,您将收到此错误消息,而不是意外地推送错误的提交:

 error: unable to push to unqualified destination: HEAD



4> Tim..:
简短回答:

git push

例子:

git push fc47b2

git push HEAD~2

答案很长:

提交链接在一起作为具有父/子机制的链.因此,推送提交实际上也会将所有父提交推送到此远程未知的提交.git push当前提交时隐式执行此操作:所有先前的提交也被推送,因为此命令等效于git push HEAD.

因此,问题可能会重写为如何推送特定提交,例如,此特定提交可能是HEAD~2.

如果您要推送的提交是非连续的,只需git rebase -i特定推送之前使用a重新排序.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有