Lucius's Blog

git常用技巧

这里记录的是git最为常见的操作,然而这种帖子博客到处可见,我只是记下来方便我查阅而不需要到处去查找。在这里我推荐一位博主的网站《廖雪峰》,相信很多人都已经见过他的文章了,我也是拜读他的文章得以技术成长。还有《git 常用清单》

  1. 工作区和暂存区

    工作区:就是本地目录,即在git add之前

    暂存区:在文件夹.git这个版本库下有一个暂存区跟很多分支,即在git add之后

    当执行git add命令时,工作区的内容便会到stage暂存区,git commit之后暂存区的内容就会提交到相对应的分支上。

  2. git管理的是修改

    比如第一次修改readme,然后执行git add到暂存区,然后再修改readme,最后执行git commit提交到分支。

    结果调用git status时发现现在仍有一个modified文件,这是因为我们没有把新修改的文件提交到暂存区,所以导致分支中的文件和工作区的原文不匹配。所以我们需要重新addcommit。这就是所说的,git管理的是“修改”,而不是“文件”本身。

1、丢弃工作区的文件

modified

1
$ git checkout -- file

2、暂存区回滚

add

1
2
3
4
$ git reset HEAD file
$ git checkout -- file
// 也可以
$ git checkout HEAD -- file

3、版本回滚

commit

1
2
3
4
5
$ git reset --hard commit_id
// 查看历史版本
$ git log
// 查看未来版本
$ git relog

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
2
3
$ git stash apply // 全部取出

$ git stash apply stash@{index} // 取index下的储存

取消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
2
3
4
5
6
7
8
// 所有标签
$ git tag

// 系列标签(显示1.9.*的所有标签)
$ git tag -l 'v1.9.*'

// 查看相应标签的版本信息
$ git show v1.9.0

新建标签

1
$ git tag -a v1.9.9 -m "version tag description" // -a(annotated)

删除标签

1
2
3
4
5
6
// 删除本地标签
$ git tag -d v1.9.9

// 删除远程标签
$ git tag -d v1.9.9
$ git push origin :refs/tags/v1.9.9

推送标签

1
2
3
4
5
// 推送指定标签
$ git push origin v1.9.9

// 推送所有标签
$ git push origin --tags

14、远程分支

拉取远程分支

1
2
// git checkout -b [分支名] [远程名]/[分支名]
$ git checkout -b test origin/test

跟踪远程分支

1
$ git checkout --track origin/test

推送远程分支

1
$ git push origin localBranch:remoteBranch

15、Permission denied (publickey)

今天要拉取一个新项目,发现了老是拉不成功,在gitlab成员权限检查了完全没问题,只能先试试重新生成key。

1
2
$ ssh-keygen -t rsa -C "xxx@xxx.com" -f ~/.ssh/MyXXX
# -f ~/.ssh/MyXXX # 重命名为MyXXX

发现还是不行。后来查到了是因为新添加的key不能加入ssh,于是就试试下面的命令就发现好了。

1
2
$ ssh-agent
$ ssh-add ~/.ssh/MyXXX # 添加身份验证

16、查看指纹

1
$ ssh-keygen -l -E md5 -f ~/.ssh/xxx.pub
我只是试下能不能被赞赏😳