git一些进阶的操作和坑
前言
开个坑,记录一下git一些使用场景和对应操作
错误提交commit
# 回退一次commit
git reset --hard HEAD^
# 回退到某次commit
git reset --hard <commit_id>
如果使用git revert,会留下两条记录。
特别是不小心将master合并到current branch时候,如果用revert来撤销修改,那么接下来的PR会产生非常多的conflict
接着将本地reset完的结果push上去
git push --force origin <branch_name>
初始化
这个过程不算进阶,只不过我平时一直用github desktop操作,十分不熟悉罢了。
git init
git remote add origin aaa@qq.com:xxxx.git
出于安全考虑,Github 服务器和我们本地的通讯要求使用 SSH Key 来验证
# 网上的一些方案无法生成可用的SSH key
ssh-****** -t rsa -b 4096 -C "aaa@qq.com"
放到github中便可
git clone 相关
使用github的镜像网站进行访问,github.com.cnpmjs.org,我们将原本的网站中的github.com 进行替换。
如
git clone https://github.com.cnpmjs.org/graykode/gray.git
之后会得到项目文件夹,进去后.git内就包含了远程仓库项目的所有信息
aaa@qq.com:~/code/iLife/iLife# git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/auth
remotes/origin/back-end-baiduai
remotes/origin/back-end-bili
注意:使用这个方法后,push,fetch可能需要多次才能成功
error:src refspec master does not match any
引起该错误的原因是,目录中没有文件,空目录是不能提交上去的,而且在push之前至少有过一次commit才能提交
HEAD detached at origin/master
这是由于当切换到远端master时候
git checkout origin/master
提示如下内容
$ git status
HEAD detached at origin/master
Untracked files:
(use "git add <file>..." to include in what will be committed)
iLife/
nothing added to commit but untracked files present (use "git add" to track)
说明现在是一个匿名分支状态
正常情况下,HEAD指向一个branch,而branch又指向一个commit。
detached HEAD state指的是HEAD指针没有指向任何的branch,而是指向了一个commit
因为HEAD不能指向远程分支,它只能指向本地的某个commit或者本地分支。当"git checkout 远程分支",而本地又没有这个分支,HEAD就会直接指向远程分支指向的commit了,HEAD指向commit就会进入detached HEAD state。
于是:
git checkout -b 分支名
让一个branch指向这个commit链即可恢复正常
上一篇: 谓词的经典用法——数组专用过滤器
下一篇: restful最佳实践--接口规范