让git从不推送一次提交?

时间:2011-08-29 19:14:07

标签: git

我不认为这是可能的,但是想到有人可能对如何实现这个目标有一个很好的想法:

我有一个我检查过的项目,在我接手之前很久就存在了。我在各种文件中进行了大约12次更改,我从不想签入(它们都是配置更改)。

有没有办法提交这组更改然后再实际推送那个提交?我知道这听起来很奇怪:))

澄清:

我希望这些更改保留在我的工作目录中,我需要它们才能使应用程序在本地运行。我希望能够继续提交其他更改,甚至是同一文件中的更改,但绝不会将配置更改推送到其他任何位置......

在我想要的每一次推动之前,这有点像:

  • cherry pick and stash this one commit
  • 将一个提交改为
  • 将此存储重新应用于我的代码库

3 个答案:

答案 0 :(得分:20)

这是将本地补丁集维护到您无法控制的上游项目的类似模式。处理此问题的最简单方法是使用一个中间分支,所有更改都将合并,如下所示:

___________________________ master
\__________________________ config-changes
     \_____________________ daily-work

master包含要共享的所有内容。 config-changes中提交的唯一内容是您希望在共享时可以轻松还原的更改。 daily-work是您完成所有工作的分支。要进行设置,请执行以下操作:

# (no local config changes should be in master at this point)
git checkout -b config-changes master
# Make your config-related changes that you don't want to share
git commit -am "Made local config changes"
git checkout -b daily-work
# Work and commit like normal

当您准备好分享您的更改时,请执行以下操作:

git rebase --onto master config-changes daily-work
git checkout master
git merge daily-work

这将还原config-changes中所做的所有更改,但是否则会使其看起来像是直接从master分支。请注意,执行此rebase后,如果要继续使用daily-work,则需要将其重新绑定到config-changes,但最好为每次更改创建一个新分支。

如果您需要从master下拉新的更改,请执行以下操作:

git checkout master
git pull
git checkout config-changes
git merge master

合并会将您的本地配置更改重新应用到最新的主服务器上。然后,您可以根据需要自由创建新的daily-work分支,或将config-changes合并到旧分支中。基本上,您永远不会直接从master合并到daily-work。您首先要经过config-changes

一开始似乎做了很多工作,但是一旦你做了一两次,你会发现它比手动维护更改容易得多。

答案 1 :(得分:4)

对这些文件使用git update-index --assume-unchanged以使git认为文件未被修改。

评论之后,另一种方法是让你推出一个单独的分支。这个分支的提交是从工作分支中挑选出来的。因此,当您想要推送时,切换到“推送”分支,从“工作”中推送提交并推送。

答案 2 :(得分:0)

是的,只需创建一个单独的分支并在那里存储这些更改:

git checkout -b your-new-branch
git commit -a

完成提交后,只需返回原始分支,忘记这些更改。