如何在Git中保存但不提交到远程仓库

4
我遇到了这样的问题。我修改了一个文件并进行了测试。我们称之为“最后的好状态”。
然后我又修改了一些代码。现在有个管理人员告诉我要提交和部署我所测试过的内容。所以我想把我的文件安全地保存在远程仓库中(我不想让硬盘崩溃摧毁我在最后的好状态之后做出的更改),恢复到最后的好状态,然后提交最后的好状态。
在其他版本控制系统中,我可以选择将文件保存到远程服务器而不进行提交。但在Git中没有这样的选项。我可以使用stash命令,但它只是存在于本地磁盘上,并不能从硬盘崩溃中得到保障。有没有人有什么好的想法?
3个回答

8

您可以在相同的代码点创建一个备份分支,然后推送此备份分支并继续在另一个分支上工作。

如果出现问题,只需切换到备份分支即可。

git branch backup
git checkout backup
git push origin backup <- at this point everything is saved at your remote

git checkout YOUR_OLD_BRANCH (develop maybe)

git checkout backup <- anytime that you want to get your "last good state"

我希望这正是您所需要的。


2
第一步是提交需要部署的良好变更。请执行以下操作:
git add foo

对于您想要包含在该提交中的任何文件。如果您只想为好的提交包含文件的部分更改,则可以执行以下操作:

git add --patch foo

然后提交并推送:

git commit -m "Foo the bar because baz"
git push

如您所述,您可以在此时执行 git stash 命令,但这只会将您的更改保存在本地。相反,您应该切换到一个新分支,在那里提交您的更改并推送:

git checkout -b temp
git add .
git commit -m "Temp"
git push origin temp

您IP地址为146.190.162.183,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。
git config alias.server-stash "! git checkout -b $1; git add .; git commit -m 'Temp'; git push $2 $1"

然后按照以下方式使用它:
git server-stash temp origin

这种情况是版本控制系统的口号“早提交,频繁提交”的好教训。特别是在你测试完之前的更改后,继续进行其他操作之前,请务必提交!然而,即使你还没有完成测试,也可以随时提交。在Git中,提交是本地的,如果不想推送它们,就不必这样做。(并且明智地使用分支可以确保未准备好的提交不会妨碍你。)


在其他版本控制系统上,这个过程要简单得多。我只需要“保存”而不是“提交”,我的文件就会被保存到远程仓库中。 - Apurva Singh
@ApurvaSingh 我更新了我的答案,并提供了定义别名的说明,这应该会简化流程。 - Scott Weldon

1
当你的经理要求你部署你测试过的内容时,你应该创建一个带有未测试更改的分支并将其推送到远程:
git checkout -b <your new branch>
git push origin <your new branch>

然后你可以切换回主分支,移除待处理的更改并发布经过测试的代码:
git checkout master
git reset hard HEAD
// deploy your code

在你的新分支中测试更改后,将其合并回主分支:

git checkout master
git merge <your new branch>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接