如何保存而不在Git中提交远程存储库

时间:2016-10-20 20:20:58

标签: git

我正面临着这样的问题。我修改了一个文件并进行了测试。让我们称这个状态为#34;持续良好状态"。

然后我修改了一些代码。现在,一些经理人告诉我提交和部署我测试的内容。所以我想要的是将我的文件安全地保存在远程存储库中(我不希望硬盘崩溃以在最后一个良好状态后销毁我的更改),恢复到上一个​​良好状态,然后提交最后一个良好状态。

在其他VCS中,我可以选择将文件保存到远程服务器而不提交。在Git中没有这样的选择。我可以藏匿,但这是在我的本地磁盘上,并不是安全的硬盘崩溃。有人有什么想法吗?

3 个答案:

答案 0 :(得分:3)

你可以在同一个代码点创建一个备份分支。然后推送这个备份分支并继续在另一个分支工作。

如果出现任何问题,您只需结帐到备用分支

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"

我希望这就是你正在寻找的东西

答案 1 :(得分:1)

第一步是提交需要部署的良好更改。做:

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

由于您已在单独的分支机构上提交,因此您设置的任何CI / CD都不会被您的临时更改触发,但您仍然可以将它们推送到服务器。

要自动执行后一个过程,您可以定义别名:

git config alias.server-stash "! git checkout -b $1; git add .; git commit -m 'Temp'; git push $2 $1"

然后将其用作:

git server-stash temp origin

这种情况对VCS的早期承诺,经常提交是一个很好的教训。特别是因为您已经完成了之前的更改测试,所以在继续之前,请提交!但是,即使您还没有完成测试,仍然可以自由提交。提交是Git本地的,如果你不想,你不必推动它们。 (明智地使用分支机构将确保准备好的承诺不会妨碍你。)

答案 2 :(得分:1)

当您的经理要求您部署已测试的内容时,您应该使用未经测试的更改创建一个分支并将其推送到远程:

git checkout -b <your new branch>
git push origin <your new branch>

然后,您可以切换回主分支,删除待处理的更改并发布经过测试的代码:

git checkout master
git reset hard HEAD
// deploy your code

在测试了“新分支”中的更改后,将其合并回master:

git checkout master
git merge <your new branch>