我正面临着这样的问题。我修改了一个文件并进行了测试。让我们称这个状态为#34;持续良好状态"。
然后我修改了一些代码。现在,一些经理人告诉我提交和部署我测试的内容。所以我想要的是将我的文件安全地保存在远程存储库中(我不希望硬盘崩溃以在最后一个良好状态后销毁我的更改),恢复到上一个良好状态,然后提交最后一个良好状态。
在其他VCS中,我可以选择将文件保存到远程服务器而不提交。在Git中没有这样的选择。我可以藏匿,但这是在我的本地磁盘上,并不是安全的硬盘崩溃。有人有什么想法吗?
答案 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>