我正在寻找一种从分支中排除提交的方法。
假设我有分支 master ,我将其推送到生产服务器。 但我承诺我不想推送到服务器。有没有办法在推送中排除这些提交?
使用标签可能会有可能吗?
也许你有另外的想法如何解决这个问题?
答案 0 :(得分:3)
从一开始......这听起来像是工作流程中额外branches的用例。您可能希望拥有一个指向生产服务器的master
分支。然后,当您想要进行增量提交,错误修正,重构等时,您可以将它们存储在development
分支中。这样,生产服务器仍然可以git pull
(来自master
)而没有任何问题,您可以将提交存储在另一个地方。一旦开发分支准备好投入生产,您可以rebase
development
master
分支在development
上发生的任何提交时,而您在其他地方忙碌,那么您可以快速 - 使用git merge
master
转发到master
此周期称为Feature Branch Workflow,可能会解决您遇到的问题的性质。
现在......回答您的初始问题,从git存储库中提取时,没有超级直观的方法来过滤掉特定的提交。不是说它无法完成......但要实现这一目标需要一些工作。
如果我有一个名为Newest
a2a35a479a69b62cba8c65344211d9fc3e1dc66e - E
7213fb8420ca164c3975078a498b394be3455870 - D
b6db644732c28a4f91061d812a61c37d09f8f94c - C
4dab25431e3dd747874f9488389c094e81bc96ba - B
aa2d56df73afb19043c33f4b9e8addd2d9089375 - A
Oldest
的分支并且它已经提交了A-B-C-D-E:
origin
我只想拉提交A-B-D-E(丢弃C)我会做以下事情:
git remote -v
命名。使用git branch
查看可以从中获取和推送的遥控器。git log
列出可用的分支。master
master
作为对主分支中最新提交的引用。如果情况进展顺利,您现在将按顺序提交一个分离的HEAD并提交A-B-D-E。你可能遇到问题,其中涉及合并(这完全是一个单独的问题)我不知道你想从这里做什么,但你可以在这一点创建一个新的分支(并开始使用这个新的未来的分支),或保持原样,直到你需要再次从XmlElement link = document.CreateElement("link");
link.SetAttribute("xlink:href", mapGuid.ToString());
挑选更多的提交(这听起来有点奇怪......我不推荐这个)
答案 1 :(得分:0)
如果是某些提交,例如5,提前 origin / master ,但希望仅推送其中一些,比如说2,那么the manual可以帮助您:将其作为主题分支
撤消提交,使其成为主题分支
$ git branch topic/wip (1) $ git reset --hard HEAD~3 (2) $ git checkout topic/wip (3)
然后你可以push
(前两次提交)到 origin / master ,然后继续工作。您可能只是进入主题/ wip 分支,然后选择性地进行合并,或者您可以将整个主题/ wip 分支合并到本地主分支中。
关键点是
branch
命令,用于将当前状态保存到分支reset --hard
命令,它从主答案 2 :(得分:0)
你需要从主人那里得到另一个分支,然后从那里挑选你想要的提交。您可以按git log
来自大师
git checkout -b branch
git cherry-pick <sha1-of-commit>
然后推你的分支。