我不认为这是可能的,但是想到有人可能对如何实现这个目标有一个很好的想法:
我有一个我检查过的项目,在我接手之前很久就存在了。我在各种文件中进行了大约12次更改,我从不想签入(它们都是配置更改)。
有没有办法提交这组更改然后再实际推送那个提交?我知道这听起来很奇怪:))
澄清:
我希望这些更改保留在我的工作目录中,我需要它们才能使应用程序在本地运行。我希望能够继续提交其他更改,甚至是同一文件中的更改,但绝不会将配置更改推送到其他任何位置......
在我想要的每一次推动之前,这有点像:
答案 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
完成提交后,只需返回原始分支,忘记这些更改。