本文最后更新于:2020年7月2日 晚上

* 今天看到了一份常用Git的命令总结,和大家分享一下~ *

  • git

    • 仓库设计原理

      • 工作区 Working Directory:就是本地建立git仓库的目录
      • 版本库 Repository:工作区中的一个隐藏目录 .git,其主要存储了
        • 暂存区 stage
        • git自动创建的主分支master
        • 指向主分支master的指针HEAD
      • 暂存区 stage
        • git add 的作用是将文件修改添加到暂存区中
        • git commit 的作用是将修改提交到当前分支上
        • git commit 后,一次性将所有存放在暂存区的修改提交到当前分支上,此时工作区clean,暂存区clean
          - git版本管理的不是文件,而是修改,或者说commit的来源只是暂存区中add的修改记录,所以版本回退会非常快
      • HEAD指针
        • HEAD指针记录当前最新的版本
    • 创建仓库

      mkdir RepositoriesName
      cd RepositoriesName
      git RepositoriesName
    • 添加文件并提交到仓库

      //参数m中可以简单说明本次修改的内容
      git add filename
      git commit -m "wrote a readme.txt"
    • 查看仓库当前状态

      git status
    • 查看文件修改内容

      git diff filename
    • 查看版本提交历史

      git log
    • 版本回退

      //回退历史
      //一个^表示一个版本
      //回退到上一个版本
      git reset --hard HEAD^
      //回退到上上一个版本
      git reset --hard HEAD^^
      //回退到前一百个版本
      git reset --hard HEAD-100
      //重返未来
      //回退到commit ID指定的版本
      git reset --hard CommitID
    • 查看命令历史,顺便找commit ID,重返未来必备

      git reflog
    • 撤销修改

      • 当修改还没有从工作区提交至暂存区时,撤销工作区的修改,此时工作区与版本库一致

        //checkout的作用就是用版本库的版本替换工作区的版本
        git checkout -- filenanme
      • 当修改已经从工作区add到暂存区时,先撤销暂存区的修改,再撤销工作区的修改,此时工作区与版本库一致

        //先将暂存区的修改撤销
        git reset HEAD filename
        //再将工作区的修改撤销
        //checkout的作用就是用版本库的版本替换工作区的版本
        git checkout -- filename
      • 当修改已经从暂存区commit到版本库时,参考版本回退的方法

      • 当修改已经从版本库push到远程库时,那就gg了。。。

    • 删除文件

      • 真心要删

        git rm filename
        git commit -m "delete filename"
      • 手抖删错

        //checkout的作用就是用版本库的版本替换工作区的版本
        git checkout -- filename
    • GitHub

      • 连接远程仓库,设置SSHKEYS

        • 用户根目录没有.ssh目录时,生成该目录

          ssh-keygen -t rsa -C "email@example.com"
        • 有该目录时,目录下的id_rsa是密钥,id_rsa.pub是共钥,将共钥复制到GitHub中的SSHKEYS中

          • 这里得用cat把共钥输到屏幕上,要是在vim里直接复制,会有Linux和Windows换行符的差异,会报错(虽然这里直接是Linux环境。。但坑之前踩过。。)
      • 克隆远程仓库到本地

        git clone git@github.com:GitHubUserName/RepositoriesName.git
    • 分支管理

      • 创建分支

        //先创建分支,再切换到分支上
        git checkout -b branchName
        
        //相当于先创建分支
        git branch branchName
        //再切换到分支上
        git checkout branchName
      • 查看当前分支

        git branch
      • 切换分支

        git checkout branchName
      • 合并制定分支branchName到当前分支 Fast forward模式

        //此时默认使用Fast forward模式合并,分支不会产生commit
        git merge branchName
      • 合并制定分支branchName到当前分支 普通模式

        //分支会产生一个commit
        git merge --no-ff -m "merge with no-ff" branchName
      • 删除分支

        //此时分支必须是合并过的
        git branch -d branchName
        
        //删除一个未合并过的分支
        git branch -D branchName
      • 解决合并冲突

        • 首先查看合并冲突的文件,文件中用符号已经标记出了冲突的内容

        • 将内容统一后,再提交

          git add
          git commit -m "what"
        • 此时合并自动完成

          //git log --graph 可以看到合并分支图
          git log --graph --pretty=oneline --abbrev-commit
          *   c092d7a (HEAD -> master) and
          |\
          | * 152fb2a (featrue) AND
          * | 6b80d04 &
          |/
          * af8429a branch test
          * 89adff2 delete test.txt
          * 550c40a add new file test.txt
          * 34a5dd7 append GPL
          * f76a65d add distributed
          * d290302 wrote a readme.txr
      • 现场暂存

        git stash
      • 现场暂存列表

        git stash list
      • 现场恢复

        //现场恢复,同时将stash内容删除
        git stash pop
        
        //相当于
        //先现场恢复
        git stash apply stash@{0}
        //再删除暂存的现场
        git stash drop stash@{0}
      • 查看远程库信息

        git remote -v
      • 从本地推送分支

        //先尝试推送
        git push origin branchName
        //如果失败了,说明远程分支比本地分支更新,本地的推送与远程库的最新版本有冲突,此时将远程库的最新版本拉下来
        git pull
        //如果失败了,说明没有指定本地分支与远程分支的链接,此时建立设置链接
        git branch --set-upstream branchName origin/branchName
        //如果pull成功,但是报merge合并失败,则需要解决合并冲突,并在本地提交
        //没有冲突或者解决掉冲突后,向远程库推送
        git push origin branchName
    • 标签管理

      • 查看标签

        git tag
      • 创建标签

        //-a 指定标签名
        //-m 指定说明文字
        git tag tagName commitID
      • 查看标签内容

        git show tagName
      • 推送本地标签到远程库

        //推送某个标签
        git push origin tagName
        //推送所有未推送到远程库的本地标签
        git push origin --tags
      • 删除标签

        //删除本地标签
        git tag -d tagName
        //删除远程标签
        git tag -d tagName
        git push origin :refs/tags/tagName

图片来源:git-cheat-sheet

Git常用命令总结

顺便把我的Github贴出来。。。虽然现在还没有什么东西。。。→_→
kongkongkkk的Github:Github