这里记录的是git最为常见的操作,然而这种帖子博客到处可见,我只是记下来方便我查阅而不需要到处去查找。在这里我推荐一位博主的网站《廖雪峰》,相信很多人都已经见过他的文章了,我也是拜读他的文章得以技术成长。还有《git 常用清单》。
工作区和暂存区
工作区:就是本地目录,即在
git add
之前暂存区:在文件夹.git这个版本库下有一个暂存区跟很多分支,即在
git add
之后当执行
git add
命令时,工作区的内容便会到stage暂存区,git commit
之后暂存区的内容就会提交到相对应的分支上。git管理的是修改
比如第一次修改readme,然后执行
git add
到暂存区,然后再修改readme,最后执行git commit
提交到分支。结果调用
git status
时发现现在仍有一个modified文件,这是因为我们没有把新修改的文件提交到暂存区,所以导致分支中的文件和工作区的原文不匹配。所以我们需要重新add跟commit。这就是所说的,git管理的是“修改”,而不是“文件”本身。
1、丢弃工作区的文件
modified
1 | $ git checkout -- file |
2、暂存区回滚
add
1 | $ git reset HEAD file |
3、版本回滚
commit
1 | $ git reset --hard commit_id |
4、回滚已提交到远程仓库的提交
1 | $ git revert commit_id |
5、filename too long错误
我在windows提交node_module时,发现node_module的路径太长了,导致我没法提交,找到了网上的解决方法。
详细查看这里 Filename too long
1 | $ git config --system core.longpaths true |
6、查看修改历史
- git log –pretty:可列出文件的所有改动历史,注意,这里着眼于具体的一个文件,而不是git库,如果是库,那就有很多改动了
1 | $ git log --pretty=oneline filename |
- git show:打印出文件的详细改动历史,行前的数字就是每次提交的commit_id,常常配合
git log
查看某个文件的commit_id
1 | $ git show commit_id |
- git reflog:查看每一次的操作命令
1 | $ git reflog |
7、创建分支
- 创建并切换分支
1 | $ git checkout -b dev_name |
- 推送分支
1 | $ git push -u origin dev:dev // -u 关联本地分支与远程分支 |
如果pull的时候提示“no tracking information”,则说明本地分支没有跟踪远程分支
1 | $ git branch --set-upstream branch-name origin/branch-name |
8、删除分支
- 删除本地分支
1 | $ git branch -d dev_name |
- 删除远程分支
1 | $ git push origin :dev_name //注意冒号跟分支名没有空格 |
9、暂存修改
若遇到工作的分支上还没做完同时又不想提交,并且这时候另外一分支出现bug急需修复,这个时候我们可以将本地修改做暂时储存
1 | $ git stash [save "description"] // 暂时存储是否添加描述为选填 |
查看暂存列表
1 | $ git stash list |
取出stash列表内容
1 | $ git stash apply // 全部取出 |
取消stash储存
1 | $ git stash drop stash@{index} |
10、强制覆盖远程内容
1 | $ git push origin master --force |
11、修改commit备注
1 | $ git commit --amend |
12、重命名分支
1 | $ git branch -m ordinary-dev-name new-dev-name |
13、标签
显示标签(可以参考廖雪峰大大的博客)
1 | // 所有标签 |
新建标签
1 | $ git tag -a v1.9.9 -m "version tag description" // -a(annotated) |
删除标签
1 | // 删除本地标签 |
推送标签
1 | // 推送指定标签 |
14、远程分支
拉取远程分支
1 | // git checkout -b [分支名] [远程名]/[分支名] |
跟踪远程分支
1 | $ git checkout --track origin/test |
推送远程分支
1 | $ git push origin localBranch:remoteBranch |
15、Permission denied (publickey)
今天要拉取一个新项目,发现了老是拉不成功,在gitlab成员权限检查了完全没问题,只能先试试重新生成key。
1 | $ ssh-keygen -t rsa -C "xxx@xxx.com" -f ~/.ssh/MyXXX |
发现还是不行。后来查到了是因为新添加的key不能加入ssh,于是就试试下面的命令就发现好了。
1 | $ ssh-agent |
16、查看指纹
1 | $ ssh-keygen -l -E md5 -f ~/.ssh/xxx.pub |