Git命令总结

206 阅读4分钟

前情提要: 本文章仅用于学习整理,对于一些具体问题的解决方法不会太详细,只会贴出关键命令行

名词解释

  • 工作区: 本地编译器中的改动,调用 add 命令前的代码区域
  • 暂存区: 调用 add 命令后,调用 commit 命令前, 被 git 暂存代码的区域
  • 本地仓库: 调用 commit 命令后, 调用 push 命令前, 被 git 管理版本代码的区域
  • 远程仓库: 调用 push 后推送到的线上代码版本管理仓库

命令及功能概述

  • add: 将工作区代码添加至暂存区
  • commit: 将暂存区代码提交至本地仓库
  • push: 将本地仓库代码推送至远程仓库
  • fetch: 拉取远程仓库代码至本地
  • merge: 合并同分支或不同分支代码
  • rebase: 变基,效果与 merge 类似, 区别在于 rebase 前后都是一个分支
  • pull: 拉取远程分支至本地,并与本地分支合并,效果同 fetch + rebase 命令
  • log: 查看代码提交记录
  • reset: 回退代码至某一个版本,会修改原版本记录,且该版本之后的版本代码也会受到影响
  • revert: 回退某一次版本提交,不会修改原版本记录,会在原版本记录的基础上添加新版本记录,且不会影响除除该版本之外的其他版本

常用命令

注:
$xxx: 自定义内容, 文章中对所代表的含义也会进行标注;
[$xxx]: 可选参数;
[$xxx1 | $xxx2]: 二选一必选参数

  • 生成ssh-key: ssh-keygen

  • 将本地仓库与远程仓库关联

    • $commit-message: 提交概述信息
    • $remote-repositery-address-url: 远程仓库
    > git init
    > git add .
    > git commit . -m $commit-message
    > git remote add origin $remote-repositery-address-url
    > git push -u origin master
    
  • 拷贝远程仓库至本地

    • $remote-repositery-address-url: 远程仓库地址
    • $local-dirname: 存放代码的本地文件夹的名称,可选参数,默认为仓库名称
    > git clone $remote-repositery-address-url [$local-dirname]
    
  • 提交代码的一般流程

    • $filename: 文件名
    • .: 通配符,代指所有文件, 与 $filename 二选一
    • $commit-message: 提交概述信息
    拉取远程代码: > git pull
    将工作区代码添加至暂存区: > git add [$filename | .]
    将暂存区代码添加至本地仓库: > git commit . -m $commit-message
    将本地仓库代码上传至远程仓库: > git push
    
  • 新建本地分支

    • $branch-name: 分支名
    > git checkout -b $branch-name
    
  • 本地分支切换

    • $branch-name: 分支名
    > git checkout $branch-name
    
  • 本地代码在 工作区 未添加至 暂存区 前回退代码至修改前的状态

    • $filename: 文件名
    > git checkout $filename
    
  • 删除本地或远程分支

    • $local-branch-name: 本地分支名
    • $remote-branch-name: 远程分支名
    删除本地分支: > git branch [ -d | -D(强制删除)] $local-branch-name
    删除远程分支: > git push -d origin $remote-branch-name
    
  • 新建本地分支后提交代码

    • $remote-branch-name: 远程分支名
    设置默认推送到的远程分支: > git push --set-upstream origin $remote-branch-name
    
  • 查看代码修改状态

    > git status
    
  • 查看代码提交日志

    > git log
    
  • a 分支合并到 b 分支中

    1. 切换到 b 分支下: > git checkout b
    2. 执行 merge 命令将 a 分支合并至 b 分支中: > git merge a
    
  • b 分支还原为合并前的状态

    > git reset --hard origin/b
    
  • 工作区 内容与最近一次 commit 的版本库对比

    • $need-diff-filename: 需要对比的文件名
    > git diff [$need-diff-filename]
    
  • 暂存区 内容与最近一次 commit 的版本库对比

    • $need-diff-filename: 需要对比的文件名
    > git diff --cached [$need-diff-filename]
    
  • 工作区 内容与某一次 commit 的历史版本库对比

    • $need-diff-commitId: 需要对比的commitId, commitId可以通过 log 命令查看
    > git diff $need-diff-commitId
    
  • 暂存区 内容与某一次 commit 的历史版本库对比

    • $need-diff-commitId: 需要对比的commitId, commitId可以通过 log 命令查看
    > git diff --cached [$need-diff-commitId]
    
  • 比较两个分支的不同

    • $filename: 需要比较的文件名
    两个分支中文件区别的概述: > git diff master dev --stat
    比较两个分支中具体文件的区别: > git diff master dev -- $filename [$filename2]
    比较两个分支的区别: > git diff master dev
    
  • 查看 dev 分支中有的提交记录而 test 分支中没有的提交记录

    > git log dev ^test
    
  • 查看差异分支并区分差异所属分支

    // 左箭头 '<' 表示 dev 分支, 右箭头 '>' 表示test分支
    > git log --left-right dev...test
    

场景实践

  • 已修改但未提交的代码需要切换分支

    • $stach-code: 暂存区编码
    暂存: > git stash
    暂存区列表: > git stash list
    从暂存区中恢复: > git stash apply $stach-code
    
  • 将已通过 git add 命令添加至暂存区的文件移出暂存区

    • $filename: 需要移出暂存区的文件名
    • $dirname: 需要移出暂存区的文件夹
    > git reset HEAD -- [$filename | $dirname]
    
  • 需要切换至 test 分支,但本地存在 test 同名文件

    方法1: > git checkout -b test origin/test
    方法2: > git checkout -t origin/test
    

    如果本地已存在 test 分支, git checkout test 命令默认切换分支

  • 将已提交至本地仓库的文件或文件夹移除版本控制

    • $filename: 需要移出暂存区的文件名
    • $dirname: 需要移出暂存区的文件夹
    移除文件: > git rm -f --cached $filename
    移除文件夹: > git rm -r --cached $dirname
    
  • 撤销误提交的代码版本记录并重新提交

    • $commitId: 提交记录id
    // 1. 撤销误提交记录
    撤销最近一次的版本记录: > git reset HEAD^
    撤销某个 commitId 的版本记录: > git reset $commitId
    // 2. 重新提交(由于本地版本低于远程版本,提交时会禁止)
    清除远程误提交记录(强制提交): > git push -f
    在远程版本基础上提交(先更新解决代码冲突后再提交): > git pull && git push
    
  • 清理本地分支中远程分支已被删除的分支

    • $need-deleted-branch-name: 需要删除的本地分支名
    查看本地分支与远程分支的对应关系(在分支名后出现 ": 丢失" 或 ": done" 的分支为远程分支已删除的分支): > git branch -vv
    根据上面查出的分支信息清理本地分支: > git branch -d $need-deleted-branch-name [$need-deleted-branch-name2]
    
  • 一份本地代码对应多个远程仓库

    • 执行 N 次命令,推送 N 次代码
      • $remote-name: 远程仓库别名
      • $remote-url: 远程仓库地址
      // 添加本地代码对应的远程仓库
      > git remote add $remote-name $remote-url
      > git remote add $remote-name2 $remote-url2
      // 将代码推送至远程仓库
      > git push // 推送至默认远程仓库
      > git push $remote-name
      > git push $remote-name2
      // 修改默认推送的远程仓库
      > git push -u $remote-name // -u: --set-upstream 的简写
      
    • 执行 1 次命令,推送 N 次代码
      • $remote-name: 远程仓库别名, 默认为 origin
      • $remote-url: 远程仓库地址
      // 添加推送地址
      > git remote set-url --add $remote-name $remote-url
      > git remote set-url --add $remote-name $remote-url2
      // 将代码推送至远程仓库
      > git push
      
  • 保持本地代码与远程代码一致

    1. 拉取远程代码但不合并: > git fetch
    2. 本地代码与远程代码合并,差异部分与远程代码的 `master` 分支保持一致: > git reset --hard origin/master
    
  • 恢复本地已删除分支

    • $new-branch-name: 新分支名称
    • commitId: 提交记录id
    1. 找到需要恢复到的 commitId: > git reflog show
    2. 恢复分支: > git checkout -b $new-branch-name $commitId
    
  • 恢复已删除的代码

    1. 找到需要恢复到的 commitId: > git reflog show
    2. 恢复代码: > git reset --hard $commitId