Git 常用操作

Git 常用操作

  • git help

    • 用于显示有关Git的帮助信息
    • 如果没加任何选项,会显示Git命令的概要和最常用的Git命令列表
    • 可以加-a—all选项,显示所有可用的命令
    • 可以在后面加某个Git命令,显示该命令的详细用法,可以通过方向键滚动,输入q退出
  • git config

    • 用于获取并设置存储库或全局选项,包括Git的外观和操作各个方面的设置,比如配置默认编辑器、比较工具以及检查配置等
    • 其中最常用的是配置用户名和邮箱,安装完Git后首先要做的就是设置用户名的邮箱,因为每次提交都需要用到这两个信息,命令分别为git config —global user.name "<username>"git config —global user.email "<email>"(其中—global选项表示是全局配置,在所有项目中都会提交这个用户名和邮箱,如果希望在某个特定的项目中使用不同的用户名和密码,可以在这个项目中再使用一次该命令而不加—global选项)
    • 可以使用git config (—global) —list查看配置
  • git init

    • 用于在本地创建一个空的Git仓库,初始化工作区
  • git clone

    • 用于将远程版本库克隆到本地目录下,支持多种协议,包括HTTP, HTTPS, SSH, Git
  • git remote

    • 用于管理远程分支
    • 直接使用git remote会列出所有远程仓库的名字,使用git remote -v会列出远程仓库的名字和URL,使用git remote show <远程仓库名>会显示该远程仓库的详细信息
    • 可以用git remote add <仓库名> <url>关联远程仓库,如果是新项目的话配合git init实际上与git clone效果一样
  • git status

    • 用户显示工作目录和暂存区的状态
    • 使用该命令会显示三类信息:
      • Changes to be committed 已经在暂存区,等待添加到HEAD中的文件
      • Changes not staged for commit 有修改但是没有被添加到暂存区的文件
      • Untracked files 没有被追踪的文件
    • .gitignore中要忽略的文件虽然也属于Untracked files,但不会显示
    • 加上-s选项可以显示简单信息
  • git diff

    • 用于比较两个版本的差异,可以通过方向键滚动,输入q退出
    • 常用的选项有:
      • git diff 不加参数即默认比较工作区与暂存区
      • git diff —cached 比较暂存区与最新本地版本库(本地库中最近一次commit的内容)
      • git diff HEAD 比较工作区与最新本地版本库
      • git diff <commit-id> 比较工作区与指定commit的差异
      • git diff --cached <commit-id> 比较暂存区与指定commit的差异
      • git diff <commit-id> <commit-id> 比较两个commit之间的差异
  • git add

    • 用于将工作区的修改添加到暂存区
    • 基本用法是git add <path>,可以将<path>(文件或者目录)中修改的、新增的(不包括已删除的)文件添加到索引库
    • 三个常用的容易混淆的指令:
      • git add . 只提交被修改的和新增的文件
      • git add -u 只提交被修改的和被删除的文件(u表示update
      • git add -A 提交被修改的、被删除的和新增的文件(A表示all
    • 默认不会添加被忽略的文件,可以加-f选项添加被忽略的文件
  • git rm

    • 用于从工作区和暂存区中删除文件
    • 加上—cached选项则只删除暂存区中的文件,而不会从工作区中删除文件,即该文件不会进行版本控制,实际上还是在工作目录下
    • 加上-r选项表示删除文件夹
    • rm命令的区别:
      • git rm <filename>不仅会删除文件,还会将这个删除操作记录下来,git commit的时候会把这个操作提交上去,这样版本库就会知道该文件被删除了
      • rm <filename>只会删除物理文件,而没有将其从版本库中剔除,这时候使用git status就会告诉你deleted: <filename>,这时候有两种情况:
        • 如果你确实要从版本库中删除该文件,那就再调用git rm删除该文件,然后git commit -m <message>提交,或者直接使用git commit -am <message>,这样也会将该删除操作提交上去
        • 如果是误删了,因为版本库里还有,所以可以使用git checkout — <filename>获取版本库里的最新版本,但是未提交到版本库的修改就无法恢复了,而且不适应于没有加入到版本库的文件
  • git commit

    • 用于将暂存区的修改提交到版本库,提交中会包含HEAD的当前内容与描述更改的用户和日志消息,每次提交会生成一个40位的哈希值,作为commit-id,相当于一个快照
    • 基本用法是git commit -m <message>,使用-m选项直接在后面输入提交说明,提交说明是必须的,如果不加-m,会弹出一个文本编辑器来给你输入,想输入多行说明时可以这样用
    • git commit -a会将所有已跟踪文件中的被修改或被删除的文件都提交到版本库,即使他们没有被add到暂存区,一般不推荐
    • git commit —amend会使用与当前提交节点相同的父节点进行一次提交,即不会产生新的commit-id,旧的提交会被取消(或者理解为合并),可以叫做追加提交或者增补提交,常用于修改提交说明
  • git reset

    • 用于将当前HEAD复位到指定状态,一般用于撤销某些操作
    • <HEAD>的写法有几种,HEAD表示最新的提交节点,HEAD^表示前一次的提交节点,HEAD~n表示前n次的提交节点,HEAD@{n}表示前n次的提交节点;也可以用<comment-id>回退到某个commit(可以用git reflog查看提交记录)
    • 常用的选项:
      • git reset --soft HEAD^ 将最近一次提交节点的提交记录回退到暂存区
      • git reset --mixed HEAD^ 将最近一次提交节点的提交记录回退到工作区
      • git reset --hard HEAD^ 将最近一次提交节点的提交记录全部清除
  • git checkout

    • 用于切换分支或恢复工作树的文件(因为会重写工作区,要慎用)
    • 最常用的是git checkout <branch name>切换分支,加上-b选项可以新建分支并切换到新分支
    • 除此之外还可以用暂存区或者指定提交的内容覆盖工作区内容:
      • 用暂存区内容覆盖工作区内容:
        • git checkout <file name> 如果有多个文件用空格隔开,更稳妥的写法是git checkout — <file name>,因为当有同名的分支和文件时,Git会优先当作分支名来处理
        • git checkout . 还原所有文件
      • 用指定提交的内容覆盖工作区:
        • git checkout <commit-id> — <file name><commit-id>指定
        • git checkout HEAD^ — <file name>HEAD指定
        • git checkout <branch name> — <file name> 用其他分支的指定提交内容还原到当前分支工作区
  • git branch

    • 用于管理分支,一般用于查看、创建和删除分支
    • 常用的命令:
      • 查看当前分支(*标注的是当前分支)
        • 本地分支 git branch
        • 远程分支 git branch -r
        • 本地和远程分支 git branch -a
      • 查看本地分支对应的远程分支 git branch -vv
      • 新建分支 git branch <branch name>
      • 切换到指定分支 git checkout <branch name>
      • 修改本地分支名
        • 该分支不是当前分支 git branch -m <old branch name> <new branch name>
        • 该分支是当前分支 git branch -m <new branch name>
      • 删除分支(origin是远程仓库名)
        • 本地分支 git branch -d <branch name>
        • 远程分支 git push origin —delete <branch name>
      • 修改远程分支名(origin是远程仓库名)
        • 先修改本地分支 git branch -m <old branch name> <new branch name>
        • 删除远程分支 git push --delete origin <old branch name>
        • 将本地新分支推送到远程仓库 git push origin <new branch name>
      • 关联远程分支 git branch --set-upstream-to=<远程仓库名>/<远程分支名> <本地分支名>/git branch -u <远程仓库名>/<远程分支名> <本地分支名>
  • git stash

    • 用于将已更改但未提交的内容(包括工作区和暂存区)保存至堆栈,然后可以在某个分支上恢复
    • 常用的命令:
      • git stash 将所有未提交的修改(工作区和暂存区)保存至堆栈中,git stash save "<message>" 可以给stash加说明
      • git stash list 列出堆栈中的所有stash
      • git stash show 查看栈顶的stash与当前目录的差异,git stash show stash@{x} 可以查看指定stash与当前目录的差异,加上-p选项可以查看详细差异
      • git stash pop 将栈顶的stash弹出并应用到当前分支对应的工作目录上
      • git stash apply 将栈顶的stash应用到当前分支对应的工作目录上,与 git stash pop 不同的是该stash不会从堆栈中删除,git stash apply stash@{x} 可以应用指定的stash
      • git stash drop stash@{x} 从堆栈中移除某个指定的stash
      • git stash clear 清空堆栈
      • git stash branch <branch name> 根据栈顶的stash创建一个新的分支,如果成功则删除该stash,可以在后面加stash@{x}指定stash,用于在恢复stash时解决冲突(如果stash之后又对该文件进行了修改,则恢复时就会产生冲突并且必须解决)
  • git fetch

    • 用于从远程分支拉取代码
  • git merge/git rebase

    • 都用于合并分支,两者的区别在于:

      • git merge
        在这里插入图片描述
      • git rebaserebase的优势就是可以得到更线性的提交历史
        在这里插入图片描述
  • git pull

    • 用于从远程仓库获取某个分支的更新,再与本地的指定分支合并
    • 相当于先 git fetchgit merge,如果合并模式想用rebase模式,可以加上--rebase选项
    • 在实际使用中,git fetch更安全一些,因为在merge前,我们可以查看更新情况,然后再决定是否合并
  • git push

    • 用于将本地分支的更新推送到远程仓库
    • 基本命令为 git push <远程仓库名> <本地分支名>:<远程分支名>
    • 常用的命令:(远程仓库名为origin,本地分支名为master,远程关联分支名为refs/for/master
      • git push origin master 如果远程分支被省略,则将本地分支推送到与其关联的远程分支(通常两者同名),如果该远程分支不存在,则新建一个同名的远程分支(如果没有关联远程分支,可以在第一次push的时候加—set-upstream选项)
      • git push origin :refs/for/master 如果省略本地分支名,则表示删除指定的远程分支,因为这相当于推送一个空的本地分支到远程分支,等价于 git push origin --delete master
      • git push origin 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
      • git push 如果当前分支只有一个追踪的远程分支,那么主机名也可以省略(可以使用 git branch -r,查看本地分支对应的远程分支)
  • git log

    • 用于显示提交日志信息(按时间顺序,最近的更新在最上面)
    • 常用的命令:
      • git log <filename> 查看指定文件的提交记录
      • git log <dir>/ 查看指定目录下所有文件的提交记录
      • git log <commit-id> 查看该commit之前的提交记录(包括自身)
      • git log <commit-id1> <commit-id2> 查看两次commit之间的提交记录(包括两者)
      • git log <commit-id1>..<commit-id2> 查看两次commit之间的提交记录(不包括commit1
    • 常用的选项:
      • git log -n 显示最近的n次提交
      • git log -p 展开显示每次提交的内容差异
      • git log —word-diff 进行单词层面的对比
      • git log —stat 仅显示简要的增改行数统计
      • git log —pretty=oneline 每个提交放在一行显示
      • git log --pretty=format:%?... 可以定制要显示的记录格式
  • git reflog

    • 用于查看ref的日志,ref文件夹下记录了几乎所有本地仓库的更改,只要是让HEAD发生变化的都会记录,甚至包括已经删除的commitreset操作,所以常用于回退操作
    • 用法与 git log 大致相同,在 git log 上适用的参数在 git reflog 基本也是适用的

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值