有什么方法可以在git中从分支中排除提交吗?

时间:2015-10-21 12:39:17

标签: git deployment

我正在寻找一种从分支中排除提交的方法。

假设我有分支 master ,我将其推送到生产服务器。  但我承诺我不想推送到服务器。有没有办法在推送中排除这些提交?

使用标签可能会有可能吗?

也许你有另外的想法如何解决这个问题?

3 个答案:

答案 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)我会做以下事情:

  1. git fetch origin master

    • fetch - 从远程存储库下载/获取提交,但将它们合并到指定分支的本地副本中。
    • origin - 存储库中远程的名称。这几乎总是以git remote -v命名。使用git branch查看可以从中获取和推送的遥控器。
    • master - 您要提交的分支的名称。使用git log列出可用的分支。
  2. git checkout 4dab25

    • 结帐 - 尝试切换到git历史记录中的指定点
    • 4dab25 - 缩短的sha-256摘要(commit hash),表示您要移动到哪个提交。您可以使用master
    • 查看可用的提交哈希值
  3. git cherry-pick 7213f master

    • cherry-pick - 将其他分支中“无序”的现有提交更改应用到本地分支
    • 7213f - 缩短的sha-256摘要(commit hash)表示您开始提取的提交来自。
    • master - 这可能是另一个提交哈希,但作为一个快捷方式,我只是指定master作为对主分支中最新提交的引用。
  4. 如果情况进展顺利,您现在将按顺序提交一个分离的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 分支合并到本地主分支中。

关键点是

  1. branch命令,用于将当前状态保存到分支
  2. reset --hard命令,它从主
  3. 中删除最后3次提交

答案 2 :(得分:0)

你需要从主人那里得到另一个分支,然后从那里挑选你想要的提交。您可以按git log

查看提交

来自大师

git checkout -b branch
git cherry-pick <sha1-of-commit>

然后推你的分支。