Git 基本命令汇总

04-11 1260阅读

目录

  • 一、背景
  • 二、Git命令
    • 1、init & clone
    • 2、config
    • 3、remote
    • 4、branch
    • 5、add
    • 6、commit
    • 7、pull & push
    • 8、log & reflog
    • 9、diff
    • 10、reset
    • 11、merge
    • 12、checkout
    • 13、stash
    • 14、cherry-pick
    • 15、rebase
    • 16、show

      一、背景

      在开发过程中,我们基本都是使用Git进行代码管理,Git命令是必须要会的,下面就把Git常用命令总结下来。

      Git 基本命令汇总
      (图片来源网络,侵删)

      二、Git命令

      1、init & clone

      # 在当前目录新建一个仓库
      git init
      # 在一个目录下新建本地仓库
      git init [project-name]
      # 克隆一个远程仓库
      git clone [url]
      

      2、config

      # 查看配置
      git config [--local][--global][--system] --list
      # 查看当前git环境详细配置
      git config -l 
      # 查看系统config
      git config --system --list
      # 查看当前用户配置
      git config --global --list
      # 查看当前仓库配置信息
      git config --local --list
      # 查看全局账号
      git config --global user.name
      # 查看全局邮箱
      git config --global user.email
      # 修改配置
      git config [--local][--global][--system] section.key value
      # 设置当前项目的用户名
      git config --local user.name [用户名]
      # 配置当前用户的编码项,可以解决中文编码问题
      git config --global core.quotepath false 
      # 配置当前项目不忽略文件大小写,git默认忽略文件名的大小写,这点值得注意
      git config --local core.ignorecase false 
      

      3、remote

      # 查看远程仓库地址命令
      git remote -v
      # 删除远程仓库地址
      git remote remove origin
      # 添加远程仓库地址 http://.....
      git remote add origin [url] 
      # 查看remote 地址,远程分支,还有本地分支与之相对应关系等信息
      git remote show origin
      # 删除那些远程仓库已经不存在的分支
      git remote prune origin
      # 建好 develop 分支的跟踪中央仓库分支
      git checkout -b develop origin/develop
      

      4、branch

      # 创建分支
      git branch [branch-name] 
      # 查看当前分支
      git branch 
      # 查看本地和远程的所有分支
      git branch -a 
      # 查看远程所有分支
      git branch -r 
      # 查看本地分支与远程分支的映射关系
      git branch -vv
      # 切换分支
      git checkout [branch-name] 
      创建dev分支,然后切换到dev分支 
      # git checkout命令加上 -b 参数表示创建并切换,相当于以上两条命令
      git checkout -b [branch-name] 
      # 删除一个分支
      git branch -d [branch-name] 
      # 强制删除一个没有合并的分支
      git branch -D [branch-name] 
      # 删除远程分支dev
      git push origin :[branch-name] 
      # 更新分支列表信息
      # -p 表示删除不存在的远程跟踪分支
      git fetch -p
      # 清理无效的远程追踪分支
      git remote prune origin
      

      5、add

      # 从工作区添加指定文件到暂存区
      git add [file-name1] [file-name2] ... 
      # 将工作区的被修改的文件和新增的文件提交到暂存区,不包括被删除的文件
      git add . 
      # u指update,将工作区的被修改的文件和被删除的文件提交到暂存区,不包括新增的文件
      git add -u . 
      # A指all,将工作区被修改、被删除、新增的文件都提交到暂存区
      git add -A . 
      

      6、commit

      # 将暂存区所有文件添加到本地仓库
      git commit -m "[massage]" 
      # 将暂存区指定文件添加到本地仓库
      git commit [file-name-1] [file-name-2] -m "[massage]" 
      # 将工作区的内容直接加入本地仓库
      git commit -am "[massage]" 
      # 快速将当前文件修改合并到最新的commit,不会产生新的commit。
      # 在提交commit后发现还有部分文件修改忘记提交了可以是用该命令
      git commit --amend 
      

      加 -m 是指直接在后面写上版本的注释,不加 -m 的话会用一个vim打开文件让你写入massage,有未追踪的文件将会失败,需要 add 加入暂存区。

      7、pull & push

      # 从远程仓库拉取代码到工作空间
      git pull 
      # 从远程仓库拉取指定分支代码
      git pull origin [branch-name]
      # 将文件添加到远程仓库
      git push 
      # 将代码推送到指定的远程分支
      git push origin [branch-name]
      # 强制将代码推送到指定的远程分支
      git push --force origin [分支名称]
      # 强制提交,当我们本地reset到旧的版本时,然后普通push会被拦截,因为此是本地HEAD指向比远程库还要旧
      git push -f 
      # 推送当前本地分支到指定远程分支
      git push origin [branch-name] 
      # 退到/进到 指定的commit【sha码】,然后强制推送到远程
      git reset --hard [commit_id]
      git push origin HEAD --force
      # 删除远程分支
      git push origin --delete [分支名称]
      

      8、log & reflog

      # 查看分支历史
      git log
      # 简化查看分之历史
      # 没有pretty的是,只有commit id 前7位,加pretty的是全部的id
      git log --oneline
      git log --pretty=oneline
      # 图形式展示分支历史
      git log --graph
      # 简化版图形式展示分支历史
      git log --graph --oneline
      # 简化版图形式展示分支历史附带展示已经修改的文件
      git log --graph --oneline --name-only
      # 查看分支合并情况
      git log --graph --pretty=oneline --abbrev-commit 
      # 使用git reset --hard命令改变了HEAD指向某个版本后后,还可以用git log --reflog查看所有版本。
      git log --reflog
      # 查看最新3条commit日志数据
      git log -3 
      # 查看某个文件的修改记录
      git log -p [filename]
      # 显示操作本地版本库的命令,包括commit和reset等,
      # 在回退版本以后又后悔找不到commit id了可以使用此命令查看历史
      git reflog
      

      9、diff

      文件对比

      在我们不指定专门的文件夹的时候,git diff 默认比较的是整个项目 git 目录。

      # 工作区与暂存区比较
      git diff
      # 工作区与 HEAD ( 当前工作分支) 比较
      git diff HEAD
      # 工作区比较上次的提交
      git diff HEAD^
      # 工作区比较上两次提交,于是有了,git diff HEAD~n 是比较上n次提交与现在工作区间的关系
      git diff HEAD~2
      # 查看add的文件修改内容
      git diff HEAD [filename]
      # 工作区与暂存区文件比较(查看未add的文件修改内容)
      git diff [filename]
      # 工作区比较特定提交
      git diff [commitId]
      # 工作区与特定提交文件进行比较
      git diff [commitId] [filepath] 
      # 暂存区与 HEAD 比较
      git diff --cached
      # 暂存区比较 HEAD 的某个文件差异
      git diff --cached _posts/blog/2019-02-16-git.md
      # 当前分支与 branchName 分支进行比较
      git diff [branchName]
      # 当前分支的文件与branchName 分支的文件进行比较
      git diff [branchName] [filepath]
      # 查看某两个版本之间的差异
      git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9 b8e7b00c02b95b320f14b625663fdecf2d63e74c
      # 查看某两个版本的某个文件之间的差异
      git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9:filename b8e7b00c02b95b320f14b625663fdecf2d63e74c:filename
      

      10、reset

      当对整个版本进行操作

      # --soft 其中可选参数soft表示单纯的切换HEAD指向的commit-id
      # --mixed 默认值mixed参数表示先执行上面一步,然后再将commit-id里面的内容更新到暂存区
      # --hard hard表示先执行上面两步,然后再将暂存区内容同步到工作区
      git reset --{soft|(mixed)|hard} HEAD
      # 用上两个版本里的所有文件撤回到暂工作区
      git reset --hard HEAD^^ 
      # 用指定版本的所有文件撤回到工作区
      git reset --hard [commit id] 
      

      当对当个文件进行操作

      # 对单个文件操作时候只能用mixed参数,而且还是可省略
      # 对单个文件操作时候HEAD指向不会变
      # 将commit中指定的文件同步到暂存区中
      git reset HEAD [file-name]
      # 将指定commit-id中的文件替换掉暂存区的文件
      git reset [commit-id] [file-name] 
      

      11、merge

      # 用于合并指定分支到当前分支
      git merge [branch-name] 
      # 退出当前分支合并,当合并后冲突很多,要撤回合并分支就可以用这个命令
      git merge --quit
      # 准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward 
      # 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并
      # 而fast forward合并就看不出来曾经做过合并。
      git merge --no-ff -m [massage] [branch-name]
      

      12、checkout

      # 切换分支
      git checkout [branch] 
      # 最好加--,没有的话就把它当作切换分支看待,切换到另一个分支了,如果没有这个分支也会把它当作文件执行。
      # 用暂存区的文件覆盖掉工作区的文件
      # 如果暂存区没有可更新的就会用commit的文件更新工作区的文件
      git checkout -- [file-name]
      # 创建并切换分支
      git checkout -b [new-branch-name] 
      # 从远程仓库里拉取一条本地不存在的分支
      git checkout -b [本地分支名] origin/[远程分支名]
      # 如果出现提示
      # fatal: Cannot update paths and switch to branch 'dev2' at the same time.
      # Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
      # 表示拉取不成功。我们需要先执行,然后在执行上面命令
      git fetch
      git checkout -b [本地分支名] origin/[远程分支名]
      

      13、stash

      # 隐藏当前工作的修改
      # 如果不隐藏自己修改的半成品代码,就会发生切换到别的分支后,将然后自己的半成品代码带入其他分支,这样就发生很多不必要的麻烦。
      git stash 
      # 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
      git stash save message 
      # 查看隐藏的工作信息列表
      git stash list 
      # 删除隐藏的工作信息
      git stash drop 
      # 恢复隐藏的工作信息,同时删除隐藏的工作信息
      git stash pop 
      # 恢复指定的隐藏工作信息,但是不会删除隐藏的工作信息
      git stash apply [stash@{0}] 
      

      14、cherry-pick

      适用于在其他分支上修复了bug,但是这个bug在当前分支上依然存在,所以可以复制这个commit的过程,不必重写代码。

      # 这个是复制一次commit提交,然后在当前分支上重新提交一遍;也就是将指定commit的合并到当前分支;
      git cherry-pick [commit-id] 
      # 将某个分支的多次commit合并到当前分支
      git cherry-pick [commitHashA] [commitHashA]
      # 将某个分支的commitA到commitB的所有commit合并到当前分支
      git cherry-pick [commitHashA]..[commitHashA]
      # 使用该命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。
      git cherry-pick [commitHashA]^..[commitHashA]
      

      15、rebase

      合并多次 commit 提交。

      # 合并多次提交
      # 非关键性的提交太多会让版本历史很难看、冗余,所以合并多次提交也是挺有必要的。
      # 同样是使用以上的变基命令,不同的是变基命令打开的文本编辑器里的内容的修改。
      # 将pick修改为squash,可以是多行修改,然后保存退出。
      # 这个操作会将标记为squash的所有提交,都合并到最近的一个祖先提交上。
      # 注意:不能对的第一行commit进行修改,至少保证第一行是接受合并的祖先提交。
      # -i参数表示进入交互模式。
      git rebase -i 
      # 合并前两个历史提交,
      # 会弹出vim修改信息,修改第二行的pick为s,或者为squash,squash为合并的意识,
      # 然后保存退出编辑,会打开第二个vim编辑,合并并修改commit内容,
      # 保存退出会产生一个新的commit id,这样就合并了两个commit
      git rebase -i HEAD~2
      

      16、show

      # 显示此次提交的修改
      git show [commitid]
      
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]