Git 命令

1. git 常用命令(项目操作流程顺序)

  1. 初始化仓库

 # 在当前项目根目录 右击空白区域打开 “Git Bash Here”
 # 然后输入命令:
 	git init
 # 提示以下信息 说明 git仓库初始化完成
 Initialized empty Git repository in E:/…………/.git/
 # 【出现】当前项目根目录中 有“.git”文件夹,说明初始化成功
 ##【注意】在文件夹中显示 隐藏的项目(.git文件夹可能被隐藏)
  1. 本地仓库连接远程仓库

 # 连接远程仓库 → git remote add <shortname> <url>
 # <shortname> 给远程仓库起一个别名,通常是origin
 # <url> 远程仓库地址_可以是HTTPS(每次需要输入账号密码),也可以是SSH(提前配置秘钥公钥,不用每次输入账号密码,后边有讲到)
 git remote add origin https://gitee.com/XXX/test-git.git
  1. 查看本地仓库的连接

git remove -v
  1. 推送分支到远程仓库

m a s t e r \textcolor{blue}{master} master 主分支 用来保存和记录整个项目已完成的功能代码。

# 【1】第一次推送 → git push -u origin <分支名称>
git push -u origin master
# * [new branch]      master -> master  说明推送成功
# 【注意】如果 GitHub/gitee 把 master 改成了 man 但用的时候还是用 master
--------------------------------------------------------------
# 【2】非第一次推送
git push
# 1c04cc1..d75a499  master -> master  说明成功
  1. 创建分支

# 基于当前分支创建新的分支 → git branch <创建分支名>
git branch dev
  1. 查看所有分支

# 查看当前仓库所有分支列表
git branch
# 列表中分支名称前有 * 的代表当前所在分支
  1. 切换分支

# 切换分支 → git checkout <切换分支名>
git checkout dev
  1. 创建并切换分支

# 创建新的分支 并 直接切换到该分支 → git checkout -b <创建并切换的分支名>
git checkout -b baotou
  1. 合并分支

# 合并 dev 分支到 master 分支 → git merge <即将合并的分支名>
# 【注意】先切换到 master 分支,然后再执行合并分支命令(合并到哪个分支当前在哪个分支)
git checkout master
git merge dev
  1. 对文件进行修改之后将修改的文件提交到远程仓库

# 【注意】在本地修改了文件后
① 先将修改了的文件提交到本地仓库
② 然后再将本地仓库提交到远程仓库
  • 查看文件状态

    # 【1】繁琐(新手推荐 有提示信息-接下来可以干啥)
    git status
    # 状态报告 Untracked files: 中有红色的文件,则该文件未被跟踪(在工作区)
    
    # 【2】精简(新手不推荐)
    git status -s
    git status --short
    #(其中-s是 --short的简写)
    # 状态报告中 红色的??是未被跟踪的文件
    
    # 【注意】查看状态前 要初始化 git仓库 否则 提示 
    fatal: not a git repository (or any of the parent directories): .git
    
  • 将修改过的文件添加到暂存区

    # 【方法一】将指定文件添加到暂存区 git add <添加到暂存区的文件名>
    git add main.js
    # 没有任何提示信息,则添加成功
    # 查看状态
    git status
    # “ new file:   main.js”文件名变绿 说明该文件已经处于暂存区
    
    # 【方法二】将所有文件添加到暂存区 git add .
    git add .
    
  • 将暂存区文件提交到 git 仓库,形成版本

    # 提交到仓库
    git commit -m "新建了index.html文件"
    # -m '描述信息'  不要省略
    # -m '描述信息'  如果都省略了 就会进入 虚拟机当时学的那个编辑文件的页面 :q 退出那个页面
    
    # 查看状态
    git status
    # 出现以下信息 表明工作区现在是空的
    // On branch master
    // nothing to commit, working tree clean
    
  • 修改文件后,跳过暂存区 直接提交到仓库(将以上两步合并)

    # 文件修改后 不提交到暂存区 直接提交到仓库
    git commit -a -m "跳过暂存区,直接提交的文件XXX"
    # 【注意】新创建的文件 不能跳过暂存区 (未被跟踪的文件不能跳过暂存区)
    
# 直接删除工作区文件(在文件夹中删除文件 test.txt)后 查询状态
git status
# 状态报告显示
deleted:    test.txt
# 删除文件后 需要重新提交 项目到 git 仓库
$ git commit -a -m "直接删除工作区文件 test.txt 后,重新提交项目到git仓库"
或
$ git add .
$ git commit -m "直接删除工作区文件 test.txt 后,重新提交项目到git仓库"
  1. 拉取远程仓库当前分支的最新代码

 git pull
  1. 推送本地仓库最新代码到远程仓库

 git push
 # 【问题】拉取远程仓库代码时,别人可能修改过远程代码,就会推送失败
 # 【解决】重新拉取远程代码,然后再推送本地代码
 git pull
 git push
  1. 删除分支

 # 【情况1】分支被合并过并以后不再使用该分支 → git branch -d <删除的分支名>
 git branch -d dev
 # 【情况2】分支未合并过 → git branch -D <删除的分支名>
 git branch -D devv
  1. 基于分支进行的流程分析

  • 【1】基于主分支 master 创建对应功能分支 dev
  • 【2】切换到功能分支 d e v 分支 \textcolor{tomato}{dev分支} dev分支
    • d e v 分支 \textcolor{tomato}{dev分支} dev分支 新建文件 test.txt、开发代码等
    • 将文件添加到暂存区、提交到本地仓库
  • 【3】切换到主分支 m a s t e r 分支 \textcolor{tomato}{master分支} master分支
    • 看不到功能分支上写的代码
    • 没有 test.txt 文件,因为 test.txt 文件是在 dev 分支,还没有合并到 master 分支。
    • 合并 dev 分支上的代码,合并后在 master 分支可以看到 dev 分支的代码
    • 将合并后的 master 分支再次推送到远程服务 直接 p u s h \textcolor{tomato}{直接push} 直接push (因为以前推送过 master 主分支)。
    • dev 分支也推送到远程仓库

2. 远程仓库分支操作

  • 将本地分支推送到远程仓库

    # -u 表示把本地分支和远程分支进行关联,只在【第一次】推送的时候需要带 -u 参数,
    # 不是第一次推送就不用带 -u 参数,直接 ---> git push
    git push -u 远程仓库的别名 本地分支名称:远程分支名称
    git push -u 远程仓库的别名 本地分支名称(远程分支名称)
    
    # 【实际案例】将分支payment推送到远程仓库,到了远程仓库的分支名为 pay
    git push -u origin payment:pay
    
    # 如果希望远程分支的名称和本地分支名称保持一致,可以对命令进行简化
    git push -u origin payment
    
  • 查看远程仓库中所有分支列表

    # git remote show <远程仓库名称>
    git remote show origin
    
  • 跟踪(下载)分支

    # 【1】将远程仓库中分支下载到本地仓库,分支名保持一致
    #  git checkout <远程仓库的分支>
    git checkout remoteBranch
    # 将远程仓库中分支 remoteBranch 下载到本地仓库
    
    # 【2】将远程仓库中分支下载到本地仓库,将下载到本地的分支名进行重命名
    #  git checkout -b <本地分支名称> <origin/远程分支名称>
    git checkout -b remoteBranch origin/remoteB
    # 将远程仓库中分支 remoteBranch 下载到本地仓库并重命名为 remoteB
    
  • 拉取远程分支的最新代码

    # 从远程仓库拉取当前分支最新代码,保持当前分支代码和远程分支代码一致
    git pull
    
  • 删除远程分支

    # 删除远程仓库中,指定名称的远程分支
    # git push 远程仓库名称 --delete 要删除的远程分支名称
    git push origin --delete remoteBranch
    # 将远程仓库中 remoteBranch 分支删除
    
  • 克隆远程分支

    git clone -b <远程分支名> <远程地址>
    
  • 将远程仓库克隆到本地(自己电脑)

    # git clone <远程仓库地址>
    git clone git@gitee.com:XXX/test-git.git
    或者
    git clone https://gitee.com/XXX/test-git.git
    # 【注意】远程仓库地址在 GitHub / gitee 复制
    ① 使用 SSH 方式克隆 (不用输入账号和密码)【推荐】
    ② 使用 HTTPS 方式克隆需要输账号密码
    
  • 查看远程仓库连接 和 删除连接

    # 【1】查看本地仓库跟远程仓库连接
    	git remote -v
    
    # 【2】删除已建立的连接
    	git remote remove origin 
    

3. 发生冲突的两种情况

  1. 合并分支时发生冲突(在不同分支对同一文件做了不同的修改),解决:

    • ① 打开发生冲突的的文件,选择保留的代码

    • ② 重新提交一次操作【一定要重新提交】

      git add .
      git commit -m '解决冲突'
      
  2. 推送代码时发生冲突(远程仓库中代码别人可能修改过了,自己本地不是最新的代码),解决:

    • ① 拉取远程仓库最新代码

      git pull
      
    • ② 打开发生冲突的的文件,选择保留的代码

    • ③ 重新提交一次操作【一定要重新提交】

      git add .
      git commit -m '解决冲突'
      

4. SSH 生成秘钥文件 - 秘钥配置

  • 生成 SSH KEY

     # 打开 Git Bash 输入命令
     	ssh-keygen -t rsa -b 4096 -C "注册gitee/GitHub的邮箱" 
     # 连续 3 次回车 在  C:\Users\用户名文件夹\.ssh 生成  id_rsa 和 id_rsa.pub  2个文件。
     # 有花花绿绿内容就证明生成 SSH KEY 成功 (以前有生成的秘钥,则会有提示要覆盖吗,输入y)
    
  • gitee / GitHub 网页上配置 SSH KEY

     ① 打开 id_rsa.pub 文件,复制内容
     ② GitHub / gitee 打开配置  New SSH key
     ③ 将复制内容 粘贴到 key(公钥) 对应文本框
     ④ 标题自动填充,也可以自己写
    
  • 检测 gitee / GitHub 的 SSH KEY 是否配置成功

     # 打开Git Bash,输入如下的命令并回车执行:
     	ssh -T git@github.com
     	或者
     	ssh -T git@gitee.com
     # 然后 输入 “yes” 回车 然后有提示 “successfully” 代表成功
    

5. 反悔操作

  1. 撤销对文件的修改

    • 本质:用Git仓库中保存的文件,覆盖工作区指定的文件。
    # git checkout -- <要撤销的文件名>
    	git checkout -- index.html
    # 【注意】操作的结果:所有的修改会丢失,且无法恢复!危险性比较高,请慎重操作!
    
  2. 取消已暂存的文件

     # 取消【指定】文件的暂存
     	git  reset HEAD 文件名
     # 取消【所有】暂存文件的暂存
     	git  reset HEAD .
    
  3. 移除仓库中的文件

    • 同时移除 工作区 和 仓库 中的文件
     # git rm -f <要删除的文件名>
     	git rm -f f3.txt
     # 删除后 查看状态
     	git status
     # 提示绿色的 delete:  f3.txt
    
     # 删除也是对文件的修改
     # 【注意】删除后 也要commit提交(一定要记得)形成新的版本记录
         git commit -t "删除文件 111.txt 后重新提交"
     # 在下一个版本中就没有该文件
    

    注意:删除操作执行完,需要再做一次commit提交 ↑ ↓。

  4. 只移除仓库中文件 ,保留工作区文件

     # git rm --cache 要删除的文件名
     	$ git rm --cache 333.txt
     # 检查状态
     	git status
     # 状态报告显示 绿色的 deleted:111.txt 和 红色的  333.txt(未追踪)
    
     删除操作添加到了暂存区
     
     还要重新提交
     
     重新提交后 保留的文件处于未被跟踪状态
    
  5. 版本回退

【5-1】查看提交历史

  • # 按时间先后顺序列出所有的提交历史,最近的提交在最上面【important】
    git log
    
    # 只展示最新的两条提交历史,数字可以按需进行填写【important】
    git log -2
    
    # 在一行上展示最近两条提交历史的信息
    git log -2 --pretty=oneline
    
    # 在一行上展示最近两条提交历史信息,并自定义输出的格式
    # &h 提交的简写哈希值  %an 作者名字  %ar 作者修订日志  %s 提交说明
    git log -2 --pretty=format:"%h | %an | %ar | %s"
    

【5-2】回退到指定版本

  • # 在一行上展示所有的提交历史
    git log --pretty=oneline
    
    # 使用 git reset --hard 命令,根据指定的提交 ID 回退到指定版本
    git reset --hard <CommitID>
    
    # 在旧版本中使用 git reflog --pretty=oneline 命令,查看命令操作的历史【重点】
    git reflog --pretty=onelone
    
    # 再次根据最新的提交 ID,跳转到最新的版本
    git reset --hard <CommitID>
    

6. 忽略工作区文件

  • 忽略工作区文件

    1. 在当前项目根目录创建 .gitignore 文件

    2. . g i t i g n o r e \textcolor{red}{.gitignore} .gitignore 文件中写需要忽略的文件(有格式规范)

      ① 以 # 开头的是注释

      ② 以 / 结尾的是目录

      ③ 以 / 开头防止递归

      ④ 以 ! 开头表示取反

      ⑤ 可以使用 glob 模式 进行文件和文件夹的匹配(glob 指简化了的正则表达式)

      星号 *

      匹配 零个或多个任意字符

      [abc]

      匹配 任何一个列在方括号中的字符 (此案例匹配一个 a 或匹配一个 b 或匹配一个 c

      问号 ?

      只匹配 一个任意字符

      两个星号 **

      表示匹配 任意中间目录(比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等)

      在方括号中使用 短划线 分隔两个字符,

      表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)

      # 忽略所有 .a 文件
      	*.a
      # 跟踪所有的 lib.a ,即便你在前面忽略了 .a 文件
      	!lib.a
      # 只忽略当前目录的 TODO 文件,不忽略 其他文件夹下的 TODO 文件
      	/TODO
      # 忽略任何文件目录下名为 build 的文件夹
      	build/
      # 忽略 doc/notes.txt ,但不忽略 doc/server/arch.txt
      	doc/*.txt
      # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
      	doc/**/*.pdf
      
    3. 【举例】

      .DS_Store
      node_modules
      /superviseAppWeb
      
      # local env files
      .env.local
      .env.*.local
      
      # Log files
      npm-debug.log*
      yarn-debug.log*
      yarn-error.log*
      
      # Editor directories and files
      .idea
      .vscode
      *.suo
      *.ntvs*
      *.njsproj
      *.sln
      *.sw?
      .history/*
      /src/ele-form/
      .prettierrc
      

【补充命令】

  • 获取命令的帮助信息

    # 【1】打开 git config 命令的帮助手册
    	git help config 或者 git config --help
      git help checkout 等
    # 可以使用 git help <verb> 命令,无需联网即可在浏览器中打开帮助手册(输入命令后,直接跳到浏览器)
        -----------
    # 【2】想要获取 git config 命令的快速参考
    	git config -h
    # 不想查看完整的手册,那么可以用 -h 选项获得更简明的“help”输出:
    
  • 设置用户名 邮件地址

    git config --global user.name "XXXX"
    git config --global user.email "XXXX@itcast.cn"
    
  • 修改用户名 邮件地址

    直接重新配置,会覆盖之前的

    git config --global user.name "XXXXXXX"
    git config --global user.email "XXXXXXX@itcast.cn"
    

    如果配置错误,再次执行命令 重新配置

  • 清空

    clear 回车
    
  • 查看配置信息

    • ① 通过命令查看配置信息(Git 中输命令)

      # 查看所有配置
      	git config --list
      
      # 查看所有的全局配置项
      	git config --list --global
      
      # 查看某一个配置项(指定的全局配置项)
      	git config user.name
      	git config user.email
      
    • ② 在 Git 的全局配置文件中检查配置信息(找文件)

      # windows用户: 
      	C:/Users/用户名文件夹/.gitconfig 文件中
      
      # mac用户:
      	$HOME/.gitconfig 文件中
      

7. 合并已提交的部分分支

演示将倒数第三次提交合并到倒数第四次提交上

查看当前日志 git log
合并最后4次提交 git rebase -i HEAD~4git rebase -i 0~4(从最后一次提交合并到倒数第5次提交,但是不包括倒数第5次 commit,【注意】此时还未真正合并,以下两图演示如何合并)

在这里插入图片描述

  • ↑ 修改完 pick 为 s 之后,
  • esc 退出编辑模式
  • 输入 :wq 保存并退出,
  • 会出现下图界面 ↓ ,
  • 删除被合并记录的 commit 文字
  • esc 退出编辑模式
  • 同样输入 :wq 保存并退出

在这里插入图片描述
以上操作之后 git log 查看日志,会看到,倒数第三次提交应被合并到倒数第四次提交上(之前有两个 feat:借助react-redux中provider/connect方便读取/更新store中数据 提交记录,现在只有一个)
在这里插入图片描述
如果合并的记录之前提交到了远程,则合并完成后主要将合并之后的记录重新提交到远程 git push -f

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值