Git 命令
1. git 常用命令(项目操作流程顺序)
# 在当前项目根目录 右击空白区域打开 “Git Bash Here”
# 然后输入命令:
git init
# 提示以下信息 说明 git仓库初始化完成
Initialized empty Git repository in E:/…………/.git/
# 【出现】当前项目根目录中 有“.git”文件夹,说明初始化成功
##【注意】在文件夹中显示 隐藏的项目(.git文件夹可能被隐藏)
# 连接远程仓库 → git remote add <shortname> <url>
# <shortname> 给远程仓库起一个别名,通常是origin
# <url> 远程仓库地址_可以是HTTPS(每次需要输入账号密码),也可以是SSH(提前配置秘钥公钥,不用每次输入账号密码,后边有讲到)
git remote add origin https://gitee.com/XXX/test-git.git
git remove -v
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 说明成功
# 基于当前分支创建新的分支 → git branch <创建分支名>
git branch dev
# 查看当前仓库所有分支列表
git branch
# 列表中分支名称前有 * 的代表当前所在分支
# 切换分支 → git checkout <切换分支名>
git checkout dev
# 创建新的分支 并 直接切换到该分支 → git checkout -b <创建并切换的分支名>
git checkout -b baotou
# 合并 dev 分支到 master 分支 → git merge <即将合并的分支名>
# 【注意】先切换到 master 分支,然后再执行合并分支命令(合并到哪个分支当前在哪个分支)
git checkout master
git merge dev
# 【注意】在本地修改了文件后
① 先将修改了的文件提交到本地仓库
② 然后再将本地仓库提交到远程仓库
查看文件状态
# 【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仓库"
git pull
git push
# 【问题】拉取远程仓库代码时,别人可能修改过远程代码,就会推送失败
# 【解决】重新拉取远程代码,然后再推送本地代码
git pull
git push
# 【情况1】分支被合并过并以后不再使用该分支 → git branch -d <删除的分支名>
git branch -d dev
# 【情况2】分支未合并过 → git branch -D <删除的分支名>
git branch -D devv
- 【1】基于主分支
master
创建对应功能分支dev
- 【2】切换到功能分支 d e v 分支 \textcolor{tomato}{dev分支} dev分支
- 在 d e v 分支 \textcolor{tomato}{dev分支} dev分支 新建文件
test.txt
、开发代码等 - 将文件添加到暂存区、提交到本地仓库
- 在 d e v 分支 \textcolor{tomato}{dev分支} dev分支 新建文件
- 【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. 发生冲突的两种情况
合并分支时发生冲突(在不同分支对同一文件做了不同的修改),解决:
① 打开发生冲突的的文件,选择保留的代码
② 重新提交一次操作【一定要重新提交】
git add . git commit -m '解决冲突'
推送代码时发生冲突(远程仓库中代码别人可能修改过了,自己本地不是最新的代码),解决:
① 拉取远程仓库最新代码
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. 反悔操作
撤销对文件的修改
- 本质:用Git仓库中保存的文件,覆盖工作区指定的文件。
# git checkout -- <要撤销的文件名> git checkout -- index.html # 【注意】操作的结果:所有的修改会丢失,且无法恢复!危险性比较高,请慎重操作!
取消已暂存的文件
# 取消【指定】文件的暂存 git reset HEAD 文件名 # 取消【所有】暂存文件的暂存 git reset HEAD .
移除仓库中的文件
- 同时移除 工作区 和 仓库 中的文件
# git rm -f <要删除的文件名> git rm -f f3.txt # 删除后 查看状态 git status # 提示绿色的 delete: f3.txt
# 删除也是对文件的修改 # 【注意】删除后 也要commit提交(一定要记得)形成新的版本记录 git commit -t "删除文件 111.txt 后重新提交" # 在下一个版本中就没有该文件
注意:删除操作执行完,需要再做一次commit提交 ↑ ↓。
只移除仓库中文件 ,保留工作区文件
# git rm --cache 要删除的文件名 $ git rm --cache 333.txt # 检查状态 git status # 状态报告显示 绿色的 deleted:111.txt 和 红色的 333.txt(未追踪)
删除操作添加到了暂存区 还要重新提交 重新提交后 保留的文件处于未被跟踪状态
版本回退
【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. 忽略工作区文件
忽略工作区文件
在当前项目根目录创建
.gitignore
文件. 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
【举例】
.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 文件中