Git
Git 操作
Git 相关配置
git config --global user.name "用户名"
git config --global user.email "有效的邮箱地址"
Git 基础操作
-
初始化本地仓库git init 在文件夹内使用该命令后,会新增一个
.git文件夹 -
查看文件的
状态git status 进入本地版本查看工作区、暂存区中文件的状态
-
将工作区的文件
添加到暂存区git add 文件名 git add 文件名1 文件名2 ... git add X*X # *为通配符 在文件执行
git add 文件之前,执行git status,未添加到暂存区的文件名称显示红色。 将工作区的文件添加到暂存区后,执行
git status,已添加到暂存区的文件名称显示绿色显示绿色。 -
将文件从暂存区
撤回到工作区git rm --cached 文件名 -
将暂存区的文件
提交到本地版本库git commit [文件名] -m "提交说明" # 不指定文件名,代表暂存区的所有文件夹和文件全部提交到本地版本库 -
将
本地版本库中的文件添加到远程仓库# 与仓库地址建立远程连接 git remote add origin 远程仓库地址 git push -u origin 分支名 git push -u origin master # 推送 master 主分支 到 远程仓库 git push -u origin testing # 推送 testing 主分支 到 远程仓库 -
查询当前仓库远程路径
git remote -v -
克隆远程仓库
git clone 远程仓库地址 -
从远程仓库获取的文件合并到本地的版本
git pull git pull origin 远程分支名:本地分支名 # 与本地分支合并 git pull origin 远程分支名 # 远程分支与当前分支合并 -
testing分支代码更新,将testing分支代码合并到主分支master上git checkout master git pull origin master git merge testing git push origin mastergit merge合并代码存在冲突时,需要手动解决冲突后继续提交 -
将在工作区的文件修改,继续提交到本地版本库
git add 文件名 git commit [文件名] -m "提交说明"git commit -a -m "提交说明" # 未被追踪的文件不能使用 可以看到,未被追踪的文件,不能从工作区直接提交到版本库,使用
-a也不行 -
查看
暂存区文件列表git ls-files -
查看
本地版本库文件列表git ls-files --with-tree=HEAD
在 Git 中进行忽略文件操作(不需要的文件可以不提交)
-
在根目录创建名为
.gitignore的文件,将要忽略的文件名添加进去,之后 Git 就会自动忽略这些文件。 -
.gitignore文件本身要放在版本库里,并且对.gitignore做版本管理,不提交到本地版本库或者远程仓库,只对本地副本有效 -
文件
.gitignore格式如下:- 空行或者以
#开头(注释)的行会被 Git 忽略 - 匹配模式可以以
/开头,防止递归 - 匹配模式最后以
/结尾,表示忽略的是目录 - 在模式前加
!取反,表示忽略指定模式以外的文件或目录
- 空行或者以
-
匹配正则表达式
-
*表示匹配零个或者多个任意字符 -
[abc]表示匹配中括号里面中的一个 -
?表示只匹配任意一个字符 -
[0-9]表示匹配所有 0 到 9 的数字 -
**表示匹配任意中间目录,a/**/a可以匹配a/z、a/b/z或a/b/c/z等
-
-
示例
忽略 public 下的所有目录的文件 /public/* 不忽略 /public/assets !/public/assets 忽略具体文件 index.html 忽略所有的 java 文件 *.java 忽略 a.java b.java 文件 [ab].java 忽略 doc/ 目录及其所有子目录的 .pdf 文件 doc/**/*.doc 忽略 doc/ 目录下的所有 .txt 文件,但不忽略 doc/server/ 下的 .txt 文件 doc/*.txt 忽略任何目录下的名为 build 的文件夹 build/ 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO 文件 /TODO
git diff 命令
-
说明:在
commit操作之前,确定要提交的文件更改了哪些地方 -
比较
工作区和暂存区中文件的差别git diff [文件名] git diff --stat [文件名] # 显示有多少行发生的变化,简洁的展示差异 -
比较
暂存区和本地版本库中文件的差别git diff --cached [文件名] git diff --staged [文件名] # 作用同上,git 1.6.1 版本可用 git diff --stat --cached [文件名] git diff --stat --staged [文件名] -
补充
git diff HEAD [文件名] # 比较 工作区 和 最新本地版本库 提交的差异 git diff <commit-id> # 比较 工作区 和指定 commit 提交的差异 git diff --cached commit-id # 比较 暂存区 和指定 commit 提交的差异 git diff [<commit-id1>] [<commit-id2>] # 比较两个 commit 提交之间的差异
Git 文件重命名
-
直接修改
工作区文件的名称,使用git status会发现修改前文件被删除,新增一个刚刚重新命名后的文件,且新增文件未被追踪。执行git add 删除的文件 新增的文件,使用git status查看,Git会分析出在进行文件重命名的操作,再次提交到本地版本库即可。
-
直接使用
git mv命令git mv 文件原名称 文件新名称 # 相当于执行上述所有的步骤,Git 分析出文件已被重新命名,再次进行 提交 即可 # 相当于执行了 mv 文件原名称 文件新名称 git rm 文件原名称 git add 文件新名称
Git 删除
-
仅删除
暂存区文件git rm --cached 文件名 # 通过 commit 提交,也可将 本地版本库 的文件也删除恢复已删除文件
# 方法1: 将 工作区 中被删除的文件再次 添加 并 提交 # 方法2 git reset --mixed HEAD -
将
工作区,暂存区,本地版本库中某文件全部删除git rm 文件名 # 再次 commit 提交即可
Git 撤销
-
撤销
工作区文件的修改,但没有提交到暂存区git restore 文件名 git checkout -- 文件名 # 用法同上,但新版 Git 不建议使用此法 -
撤销暂存区文件的修改,但没提交到本地版本库
git restore --staged 文件名 # 仅从暂存区撤销到工作区,不会撤销工作区文件的修改 # git reset HEAD 文件名 # 用法同上,但新版 Git 不建议使用此法 git restore 文件名 # 两步完成撤销暂存区文件的修改
Git 查看历史版本记录
-
查看详细的历史版本记录,包括
commit-id,作者的信息,提交的时间,提交说明信息git log [文件名] # 文件名不写,就是查询所有,信息较多的话,可以按`q`提前结束查看 # 查看最近两次提交的信息 git log -n2 [文件名] -
简化显示历史版本记录
git log --oneline [文件名] # 简化查看最近两次提交的信息 git log --oneline -n2 [文件名] -
以简单
图形的方式查看分支版本历史git log --all --graph [文件名]- 翻页与退出
- 上下键:可以看上一行和下一行
- 回车:显示下一行
- 空格:显示下一页
q键:退出git log命令显示界面
- 翻页与退出
-
查看指定分支版本历史
git log 分支名称 -
查看所有的历史版本
git log --all -
拓展
- 查看指定文件的修改记录
git blame 文件名
-
git reflog查看历史提交版本,与git log的差异
git log只可以查看HEAD指针及其之前的版本信息,如果版本发生回退操作,HEAD指针之后仍存在历史提交版本的情况,而这些提交通过git log命令看不到。git reflog可以查看所有的历史版本信息
版本回退 git reset
git reset回滚到指定的commit-id
-
移动
HEAD指针的指向,指向了指定的提交版本,改变了本地版本库的文件版本,但不会改变工作区和暂存区中的文件的文本git reset --soft commit-id git reset --soft HEAD^ # 回退到上一版本 git diff --cached 文件名 # 回退后,对比工作区、暂存区与本地库中版本中文件的差别 # 若想要恢复到回退之前的版本,再次从暂存区提交即可 -
移动分支
HEAD指针的位置,且将暂存区中的数据也回退到了指定版本git reset --mixed commit-id -
移动分支
HEAD指针的位置,且将工作区和暂存区中的数据也回退到了指定版本git reset --hard commit-id # 想要恢复到回退之前的版本,只能使用 git reset --hard commit-id 命令回退
撤销 git revert
提交一个新的commit-id,来撤销之前的commit
-
revert命令是撤回某个改动,不会删除任何commit记录,而是新增一条revert操作的commit记录(会弹出commit提交信息窗口)。 -
举例:
commit-1和commit-2是正常提交,commit-3和commit-4是错误提交。现在要把commit-3和commit-4撤销掉,此时,指针指向了commit-4的提交。我们需要将HEAD指针移动到commit-2就可以达到目的。-
方法1
git reset --hard <commit-2> -
方法2:先撤销最近的
git revert <commit-4> # 回车后输入 commit 提交信息,HEAD指针指向了这个新生成的版本,而不是<commit-4>的目标版本 git revert <commit-3>
-
-
移除某几次提交的修改
git revert <commit-n> <commit-n-1> <commit-n-2> -
移除某几次连续提交的修改(含头不含尾,包含
<commit-新>不包含<commit-旧>)git revert <commit-新> ... <commit-旧> -
git revert和git reset的区别
git commit --amend命令
- 追加提交:在不新增
commit下,将新修改的代码追加到前一次的commit中。 - 刚刚的一次
commit的描述不是很准确,需要对刚刚提交的描述信息重新修改。通过git log --oneline可以查看提交信息的修改
git tag标签
-
创建标签
-
标签的分类:
-
轻量标签:某个特定提交的引用
git tag 标签名 [commit-id] # 如果不指定 commit-id,默认 HEAD 指针所指向的提交 -
附注标签:轻量标签只有标签名称,而使用附注标签,还可以为标签添加说明
git tag -a 标签名 [commit-id] -m "说明信息"
-
-
-
查看版本库中的标签列表
git tag -
查看版本库中,可匹配的标签列表
git tag -l "v*.*" # * 为通配符 -
查看指定标签的具体信息
git show 标签名 -
共享标签
默认情况下,
git push命令不会传递标签到远程仓库服务器上,所以需要手动推送标签-
推送本地指定标签
git push 标签名称 -
推送本地所有标签
git push origin --tags
-
-
删除标签
-
删除本地标签
git tag -d 标签名 # 此命令并不会从任何远程仓库中移除这个标签 -
删除远程标签
# 第一种 git push origin --delete 标签名 # 推荐使用 # 第二种 git push origin :refs/tags/标签名
-
Git 分支管理
-
分支管理的好处
- 同时并行推进多个功能开发,提高开发效率
- 版本迭代更加清晰
- 利用代码
review的实现,从而使整个团队开发更加规范,减少bug率
-
创建分支
git branch 分支名 # 使用 git log --oneline 可以查看分支所在位置,但此时为切换到新建分支 -
分支切换
git checkout 分支名 -
创建分支并切换到该分支
git checkout -b 分支名 # 相当于 git branch 分支名 git checkout 分支名 -
查看分支列表
git branch # 在所在分支前面会显示 * -
查看所有分支的最后一个提交
git branch -v -
删除分支- 删除分支的前提:必须要保证当前工作的分支,不是要删除的分支,如果是,则需要切换到其他分支,例如切换到主分支上。
git checkout master # 切换到主分支 git branch # 查看当前分支 # 分支没有合并到主分支,如果要删除它(删除无用分支) git branch -D 分支名 # D 是大写字母 # 删除远程分支 git push origin :分支名 -
新建一个分支并且使分支指向指定的提交对象
git branch 分支名 commit-id-
拓展
git checkout -b 分支名 commit-id # 相当于 git branch 分支名 commit-id git checkout 分支名
-

浙公网安备 33010602011771号