当我刚刚遇到一个小障碍时,我很高兴地习惯了我设置的 git 工作流程(或者“gitting”是否习惯了它?)。我有一个 dev 目录和一个 codebase 目录(我的实时代码),git repo 在 dev 目录中。当我想部署主分支的当前代码时,我有一个 bash 别名:
alias deploy='cd /my/path/codebase; git --git-dir=/my/path/dev/.git --work-tree=/my/path/codebase checkout -f master; cd -'
只要 HEAD 在 master 分支上,它就可以正常工作。但刚才我在另一个名为 texlabels 的分支中工作,但需要修复 master 中的一个小错误。所以我确保一切都已提交,检查了 master,修复了 bug,提交了修复,然后在记住部署之前切换回 texlabels 分支。“没问题,”我想,“别名明确要求主分支。” 没错,我的代码库目录得到了它应该有的东西。但是现在我的 dev 目录与 git 不同步 - 文件与 texlabels 分支匹配,但 HEAD 在 master 上。
由于我知道一切都已安全提交,因此我尝试了另一个“git checkout texlabels”,但正如您 git 大师可能已经知道的那样,git 交叉双臂表示抗议:
错误:您对以下文件的本地更改将被结帐覆盖:
...文件...
请在切换分支之前提交您的更改或存储它们。
中止
哼!我想我可以手动将不同的文件从代码库复制到 dev 中,这样我就可以再次检查 texlabels,但这似乎很愚蠢。更大的问题是:我可以为将来的 bash 别名添加什么,以免再次发生这种情况?是的,我应该记得在提交后立即部署,但我想稍微证明一下我的别名。有没有办法在做我现在拥有的东西之前确定 HEAD 在哪里并将其存储在 shell 变量中,然后将 HEAD 放回原来的位置?还是一种无需移动 HEAD 即可获取代码库目录文件的方法?如果别名可以只检索最后一次主提交的文件,而不会对 repo 指针、索引或我的 dev 目录进行任何净更改,那就太好了。