git常用命令

命令

初始配置
  1. 仓库级别 local 【优先级最高】

    git config --local user.name "Your name"
    git config --local user.email "you@example.com"

      git 仓库级别对应的配置文件是当前仓库下的.git/config 【在当前目录下.git目录默认是隐藏的,所以在文件管理器中我们要打开显示以藏文件】

  2. 用户级别 global【优先级次之】

    git config --global user.name "Your name"
    git config --global user.email "you@example.com"

      git 用户级别对应的配置文件是用户宿主目录下的~/.gitconfig

  3. 系统级别 system【优先级最低】

    git config --system user.name "Your name"
    git config --system user.email "you@example.com"

      git系统级别对应的配置文件是git安装目录下的 /etc/gitconfig

获取当前git配置
git --version
git config --global user.name         # 获取当前登录的用户
git config --global user.email        # 获取当前登录用户的邮箱

或者

  1. git config –local -l 查看仓库配置【必须要进入到具体的目录下,比如要查看TestGit仓库的配置信息】
  2. git config –global -l 查看用户配置
  3. git config –system -l 查看系统配置
  4. git config -l查看所有的配置信息,依次是系统级别、用户级别、仓库级别
  5. git config 常用配置选项
    • git config -e 编辑配置文件
      • git config –local -e 编辑仓库级别配置文件
      • git config –global -e 编辑用户级别配置文件
      • git config –system -e 编辑系统级别配置文件
    • git config 添加配置项目
      • git config –global user.email “you@example.com
      • git config –global user.name “Your Name”
        上面的操作表示添加用户级别的配置信息,也就是说修改用户宿主目录下面的配置文件
  6. 配置文件如何生效的
      对于git来说,配置文件的权重是仓库>全局>系统。Git会使用这一系列的配置文件来存储你定义的偏好,它首先会查找/etc/gitconfig文件(系统级),该文件含有对系统上所有用户及他们所拥有的仓库都生效的配置值。接下来Git会查找每个用户的~/.gitconfig文件(全局级)。最后Git会查找由用户定义的各个库中Git目录下的配置文件.git/config(仓库级),该文件中的值只对当前所属仓库有效
增加配置项

  参数 –add
  格式: git config [–local|–global|–system] –add section.key value(默认是添加在local配置中)
  注意add后面的section,key,value一项都不能少,否则添加失败。比如我们执行:git config –add cat.name tom

获取一个配置项

  有时候,我们并不需要查看所有配置的值,而是查看某个配置项的值,怎么做呢?
  命令参数 –get
  格式:git config [–local|–global|–system] –get section.key(默认是获取local配置中内容)
  我们先往global配置中写入一个cat.name=Tomcat的配置项,再使用git config –get cat.name看看得到的是什么:

  结果就是local中的cat.name=Tom,因此git config –get section.key 等价于git config –local –get section.key
  如果获取一个section不存在的key值,不会返回任何值
  如果获取一个不存在的section的key值,则会报错

删除一个配置项

  命令参数 –unset
  格式:git config [–local|–global|–system] –unset section.key
  相信有了前两个命令的使用基础,大家举一反三就知道改怎么用了,来,我们试试删除local配置中的cat.name

创建文件并写入内容

如果文件不存在,则创建文件

echo "hello git"
> index.html                          # 将'hello git'写入到index.html中

单个>箭头表示写入,>>表示追加

使用
git init                        # 初始化当前所在目录的这个项目
git status                      # 查看项目状态,有没有添加或者修改文件
git add .                       # 给目前的项目制作一个快照snapshot(快照只是登记留名,快照不等于记录在案,git管快照叫做索引index)
git commit                      # 将快照里登记的内容永久写入git仓库
git commit -a                   # 直接提交所有修改,省去了``git add``和``git diff``和``git commit``的工序
                                # 无法把新增文件或文件夹加入进来,所以,如果你新增了文件或文件夹,那么就要老老实实的先``git add ..``,再``git commit``
git push                        # 把更新推送到远程分支
git log -p                      # git不但会给出开发日志,而且会显示每个开发版本的代码区别所在
git log --online                # 查看版本
git diff                        # 比较暂存区和工作区的差别
git diff --cached               # 比较暂存区和历史区的差别
git diff master                 # 比较历史区和工作区的差别(修改)
git checkout index.html         # 用暂存区中的内容或者版本库中的内容覆盖掉工作区
git reset HEAD index.html       # 取消增加到暂存区的内容(添加时)
git rm index.html --cached      # 使用--cached表示只删除缓冲区中的内容
git reset --hard HEAD/commit_id # 回滚版本
git reflog                      # 回滚到未来

总结:先git add修改过的文件,再git diff并git status查看确认,然后git commit提交,然后输入开发日志,然后git push推送到远程分支,最后git log再次确认。

创建分支
git branch                      # 查看分支列表
git branch experiment           # 创建experiment分支
git checkout experiment         # 切换到experiment分支
git checkout -b experiment      # 创建分支并切换分支
git commit -a                   # 在分支上提交工作
git checkout master             # 切换到主干道
git merge experiment            # 合并分支到主干道
git branch -d experiment        # -d,表示“在分支已经合并到主干后删除分支”。如果使用大写的-D的话,则表示“不论如何都删除分支”
使用git stash命令保存和恢复进度
git stash                       # 保留当前工作区进度,会把暂存区和工作区的改动保存起来
git stash save 'message...'     # 保存当前工作区,并添加备注
git stash list                  # 显示保存进度的列表。也就意味着,git stash命令可以多次执行。
git stash pop                   # 恢复最新的进度到工作区并删除。git默认会把工作区和缓存区的改动都恢复到工作区。
git stash apply                 # 恢复最新的进度到工作区不删除
git stash drop [stash_id]       # 删除一个存储的进度,如果不指定stash_id,则默认删除最新的存储进度,stash_id从git stash list获取
git stash clear                 # 删除所有存储的进度
撤销一次已经提交到Github的内容
git reset --hard HEAD~1
git push --force

该命令执行后,会隐藏掉Github库中的被撤销掉的记录,但是指定到该被隐藏掉的记录来访问,依旧可以访问。

GitHub更新自己fork的代码
  1. clone已经fork到自己账号的代码
  2. git clone https://github.com/shadow000902/ApiTestEngine.git
    cd ApiTestEngine
  3. 查看远程分支列表
  4. ╭─taoyi at TaoYi-Mac in ~/git_projects/GitHub/ApiTestEngine on master✔ using ‹› 17-08-23 - 15:01:23
    ╰─○ git remote -v
    debugtalk	https://github.com/debugtalk/ApiTestEngine.git (fetch)
    debugtalk	https://github.com/debugtalk/ApiTestEngine.git (push)
    origin	https://github.com/shadow000902/ApiTestEngine.git (fetch)
    origin	https://github.com/shadow000902/ApiTestEngine.git (push)
  5. fetch原始源代码的新版本到本地
  6. git fetch debugtalk
  7. 合并两个版本的代码
  8. git merge debugtalk/master
  9. 如果合并代码后有冲突,解决冲突
  10. 把合并好的最新的代码提交到自己的GitHub账号上
  11. git push origin master
git撤销最后一次commit
  1. 使用git log查看commit记录
  2. commit-id1
    commit-id2
    commit-id3

    如果想要撤销commit-id1的话,就要选择commit-id2

  3. 使用命令撤销提交
  4. git reset commit-id2				# 只是撤销提交,修改的内容不变
    git reset --hard commit-id2			# 撤销提交,并撤销修改的内容
    git push origin HARD --force		# 撤销后,强制提交并push到远程分支
  5. 修改最新一次已提交但未 push 的 message
  6. git commit --amend -m "your new message"

其他相关链接
Git 常用命令