git使用心得

平时经常使用github,clone别人的项目或者自己写项目上传到github都或多或少用到git,但是一段时间不用了又忘了命令,总要浪费些时间查资料,不胜其烦,好记性不如烂笔头,今天我想自己总结一下,加深记忆,方便快速查阅,下面不啰嗦直接上代码:

  1. 创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,不需要创建了。如果没有,执行此命令,创建SSH Key。

    1
    $ ssh-keygen -t rsa -C "youremail@example.com"
  2. git初始化,让当前目录处理git管理之下

    1
    $ git init
  3. 添加文件。file可以是具体文件名,也可以是文件夹,甚至可以是.(表示add当前所有文件),post/*(表示post目录下的所有文件),post/*.js(表示post目录下的所有js文件)

    1
    $ git add <file>
  4. 查看当前状态,一般系统会提示下一步的操作。比如是否需要commit , push 等操作

    1
    $ git status
  5. 提交文件到版本库,可以输入提交信息

    1
    $ git commit -m "message"
  6. 打印命令可以查看历史记录,git log命令查看的更详细,git log --pretty=oneline命令更直观

    1
    2
    3
    4
    $ git log
    $ git log --pretty=oneline
    $ git log --pretty=oneline --abbrev-commit
    $ git log --graph
  7. 有时候需要回到上一个版本或者指定版本需要用到这个命令。HEAD表示当前版本,HEAD^表示上一个版本,上上个版本就是HEAD^^,当前版本往上100个版本就是HEAD~100。当前这里也可以使用提交的id,eg. 3628164...882e1e0,一般取前6位就可以了

    1
    $ git reset --hard HEAD^
  8. 有时候版本切回之前的版本了,但是又想恢复到现在的版本,那如何知道现在的版本号呢?别着急,git reflog帮你排除忧虑,这个命令记录了你之前所有版本记录

    1
    $ git reflog
  9. 可以丢弃(discard)工作区的修改,或者已经使用过git add命令后又修改了工作区的内容但是想丢弃,回到git add时的状态。
    即回到上一次git add或者git commit的状态。如果你git add了一些资料,但是还没有git commmit,这时你想丢弃暂存区的内容,可以使用命令git reset HEAD <file>把内容打回到工作区,再使用命令git checkout -- <file>把工作区的内容丢弃。如果你已经使用了git commit提交了内容,但是又反悔了,可以使用git reset --hard HEAD^返回上一个版本

    1
    $ git checkout -- <file>
  10. 删除文件。如果删除了文件,又反悔了,因为此时没有存储到暂存区,所以可以使用git checkout -- <file>恢复。

    1
    $ rm <file>
  11. 删除文件。注意和rm <file>的区别,git rm <file>相当于rm <file> + git add <file>。因此若想恢复之前的状态,需要先执行git reset HEAD <file>打回到工作区,再执行git checkout -- <file>

    1
    $ git rm <file>
  12. 这条命令是把本地库和github上的远程库建立关联。这个是采用ssh的方式,所以github上的ssh配置里面需要有你本地的ssh公钥。后面的chenweiyi/gitTest是你的github账号名和项目名。

    1
    $ git remote add origin git@github.com:chenweiyi/gitTest.git
  13. 当你首次提交文件到github时,需要输入这条命令。push推,表示推送到github;origin远程仓库名;master分支名;-u表示把本地master和远程仓库的master分支关联起来,以后再推送或者拉取时可以简化命令git push origin master / git pull

    1
    $ git push -u origin master
  14. 从远程仓库中克隆项目到本地。当你执行这条命令时,git自动把本地master分支和远程库的master分支对应起来,远程库默认仓库名时origin

    1
    $ git clone git@github.com:chenweiyi/gitTest.git
  15. 查看当前项目分支

    1
    $ git branch
  16. 创建名为name的分支

    1
    $ git branch <name>
  17. 切换到名为name的分支

    1
    $ git checkout <name>
  18. 创建并切换到名为name的分支

    1
    $ git checkout -b <name>
  19. 合并名为name的分支到当前分支

    1
    $ git merge <name>
  20. 删除名为name的分支

    1
    $ git branch -d <name>
  21. 查看远程库的信息,$ git remote -v 查看更详细的信息

    1
    $ git remote
  22. 推送名为branchName分支到远程库

    1
    $ git push origin <branchName>
  23. 拉去远程分支到本地。当你从远程库克隆时,默认情况下只能看到本地master分支。可以用git branch命令查看下。现在要看到其他分支就必须使用这个命令创建。比如git checkout -b dev origin/dev就能把远程dev分支创建到本地

    1
    $ git checkout -b <branchName> origin/<branchName>
  24. 与远程库创建连接后,即可使用此命令拉取远程库分支内容到本地。如果拉取失败,则可根据提示使用git branch --set-upstream <branchName> origin/<branchName> 来指定本地分支branchName与远程分支的连接。

    1
    $ git pull
  25. 首先切换到需要打标签的分支,再打标签。默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?方法是找到历史提交的commit id,然后打上就可以了。eg. $ git tag v0.9 6224937

    1
    2
    $ git checkout <branchName>
    $ git tag <tagName>
  26. 查看所有的标签。注意,标签不是按时间顺序列出,而是按字母排序的。可以使用git show <tagName>查看标签信息。

    1
    $ git tag
  27. 可以创建带有说明的标签,-a 指定标签名 ,-m 指定标签信息 ,commitId 版本id

    1
    $ git tag -a <tagName> -m <message> [commitID]
  28. 标签打错了可以删除标签

    1
    git tag -d <tagName>
  29. 创建的标签都只存储在本地,不会自动推送到远程 ,使用此命令推送到远程。或者一次性推送本地尚未推送到远程的所有标签,命令:git push origin --tags

    1
    git push origin <tagName>
  30. 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:git tag -d v1.0。然后再使用该命令:git push origin :refs/tags/v1.0

    1
    git push origin :refs/tags/<tagName>
  31. 保存代码现场

    1
    git stash
  32. 查看所有的stash

    1
    git stash list
  33. 恢复指定的stash

    1
    2
    3
    git stash apply stash@{x}
    或者恢复最近的stash
    git stash pop
  34. 删除stash

    1
    git stash drop
  35. 有时候合并分支会出现界面被锁住的情况,这时处理方法: 先按 ESC,再输入 :wq,按一下 Enter 键即可退出

  36. 出现 warning: LF will be replaced by CRLF in ... 提示时,设置 git config --global core.autocrlf false 或者 git config --global core.safecrlf false 消除提示

  37. 有时.gitignore配置文件不生效,原因是某些文件已经被纳入了版本管理中,做法是删除本地缓存文件 git rm -r --cached ,然后重新添加文件到仓库中 git add xxx git commit -m 'xxx'

  38. 本地创建的项目,需要推送到github或者码云上去,首先,你要在github或者码云上创建一个项目,例如名称为projectX,然后使用git init初始化本地工程,再次使用(以码云为例)git remote add origin git@gitee.com:cwy7/projectX.git,然后拉去远程项目使用git pull --rebase origin master,然后检查下状态 git status 以继续下一步操作

  39. 查看某一个命令的使用说明

    1
    git <command> --help