如何只提交一些本地git?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

假设我有5个本地提交。我只想把其中两个推到一个集中式回购(使用SVN风格的工作流)。我该怎么做?

这样做是行不通的:

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

这最终推动了所有5个本地提交。

我想我可以做git重置来撤销我的提交,然后是git存储,然后是git推送--但是我已经编写了提交消息并组织了文件,我不想再做它们。

我的感觉是,一些旗帜通过推送或重置将工作。

如果有帮助,这是我的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
提问于
用户回答回答于

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

$ git push origin master~3:master

如果使用的是git-svn:

$ git svn dcommit master~3

对于git-SVN,也可以使用Head~3,因为它正在等待提交。对于直接的git,需要使用分支名,因为head在respec中没有得到正确的计算。

还可以采取更长的方法:

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

如果你养成了这种工作流程的习惯,你应该考虑在一个独立的部门做你的工作。然后你就可以做这样的事情:

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

请注意,“源母版:主”部分可能是可选的。

用户回答回答于

我所做的是在当地一个叫做“工作”的分支机构工作。这个分支包含了我不打算推送到上游存储库的所有临时提交(比如变通方法或私有构建选项等等)。我在那个分支上工作,然后当我想要提交时,我切换到主分支,然后选择我所要提交的适当的提交。想要承诺,然后推大师。

在把上游的变化拉到我的主支行之后,我git checkout workgit rebase master。它重写了我所有的本地更改,使其处于历史的末尾。

我实际上在用git svn使用这个工作流,所以我的“推送”操作包括git svn dcommit。我也用tig这是一个不错的文本模式gui存储库查看器,要选择合适的提交给主.

扫码关注云+社区