目录
0 git的工作区、暂存区、本地仓库和远程仓库
0.1 图解
0.2 解析
平时我们写的代码都是在 工作区(workspace) ,执行add命令后就是提交到了 暂存区(Index) ,再执行commit命令后就把代码提交到了 本地仓库(Repository) 了,最后再执行push命令把本地代码提交到 远程仓库(Remote) 。
反过来,执行pull命令可在本地有版本库时,将 远程仓库(Remote) 最新的commit数据合并到 工作区(workspace) ;执行fetch命令在本地有版本库时,同步 远程仓库(Remote) 的分支与 本地仓库(Repository) 的分支;执行checkout命令可切换指定分支。而执行clone命令可在本地没有版本库时,从 远程仓库(Remote) 克隆整个版本库到 本地仓库(Repository)。
1 本地仓库
1.1 创建版本库
在工作区的一个合适的地方,创建一个空目录,运行Git CMD,使用init命令创建版本库(Repository),这是一个空的仓库(empty Git repository),其下有一个.git目录,是Git用于跟踪及管理版本库的。
git init #在当前目录下初始化本地仓库,即生成版本库(.git目录)git init [目录名]#同时创建一个版本库和一个目录,版本库(.git目录)生成在该目录下
1.2 分支
主分支(Master/Main)是 Git 的一个默认分支。它在项目的第一次提交时被实例化。当你开始提交时,主分支的指针会自动向前移动。一个版本库只能有一个主分支。
Git 分支实际上是指向更改快照的指针。一个分支(branch)代表一条独立的开发线,分支的使用可以从主线(Master/Main)上分离开来,直到该分支开发得差不多了再合并到主线(Master/Main)上来。
1.2.1 查看本地仓库的分支信息
git branch #查看本地仓库的分支信息#或git branch --list
对于列出的分支,其中*标记的表示当前所在的分支。
1.2.2 创建分支
git branch [分支名]#创建指定名称的分支
1.2.3 切换分支
git checkout [分支名]#切换当前分支到指定分支git branch -m master #切换到主分支git checkout -b[分支名]#创建指定名称的分支并切换至该分支
1.2.4 重命名分支
git branch -m[原分支名][新分支名]#将原分支名改为新分支名
1.2.5 合并分支
git merge [分支名]#将当前分支合并到主分支
1.2.6 删除分支
git branch -d[分支名]#删除本地仓库的指定分支(如果该分支有未合并的修改,Git会阻止你删除它)#或git branch -D[分支名]
1.3 添加文件到暂存区
1.3.1 添加单个文件
gitadd[文件名]#添加指定文件到暂存区
1.3.2 添加多个文件
gitadd[文件名1][文件名2]... #添加指定文件到暂存区
1.3.3 添加所有文件
gitadd[目录名]#添加指定目录下的文件到暂存区gitadd.#一次性添加当前目录下的所有文件到暂存区gitadd-A#同样也是将仓库中所有的文件添加到暂存区(A表示All)
1.3.4 删除暂存区的文件
如果该文件在工作区删除前已添加至暂存区,使用以下命令删除暂存区的该文件。
gitadd[已从工作区删除的文件名]#从暂存区删除该文件
1.3.5 只添加有更新及新增的文件
gitadd --ignore-removal .#忽略删除的文件
1.3.6 添加所有更新及删除的文件
gitadd-u#忽略新增的文件(u表示untracted)
1.3.7 添加符合格式的文件
gitadd *.txt #添加所有txt文件(可根据自行需要修改文件格式了类型参数)
1.4 查看本地仓库和暂存区的状态
status命令可以用来检查文件是否被追踪(tracked),然而不能看到提交记录与信息。
git status #查看上次提交后是否有对文件再次修改的详细信息git status -s#查看上次提交后是否有对文件再次修改的简短信息,其中新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记(s全称short)
1.5 提交文件
commit命令为项目创建快照,可以将项目恢复到需要的版本。两个不同的提交不会被覆盖,这是因为每个提交都会有一个由SHA(安全哈希算法)创建的加密数字commit-id。
git commit -m"[注释]"#把暂存区内的文件提交到本地仓库,引号内为提交文件的相关说明信息(m全称message)git commit [文件名1][文件名2]... -m"[注释]"#提交暂存区的指定文件到暂存区git commit -a#提交所有有修改的文件(不需要执行add命令),忽略新创建的文件
1.6 查看本地仓库提交的历史
1.6.1 常规参数
log命令用于查看本地仓库提交的记录。一个git日志包含以下数据:
- 提交的id。一个由SHA(安全哈希算法)算法生成的40个字符的检查和数据。
- 提交的作者元数据。作者的信息,如作者姓名和电子邮件。
- 提交的日期元数据。一个提交时间的日期时间戳。
- 提交的标题/信息。在提交信息中给出的提交概述。
git log #查阅提交的历史记录git log --online#一行显示一个提交信息,提交的id只显示前7个字符git log --stat#显示被修改的文件及修改的行数git log --patch#不仅显示被修改的文件及修改的行数,还显示添加、删除和更新的行的位置#或git log -pgit log --graph#以图表形式查看提交日志,通常和--online参数结合使用
q #退出log命令,回到bash
1.6.2 筛选参数
可以使用一些筛选参数获取自己所需要的提交记录。如通过数量、日期、作者筛选等。
①通过数量筛选
git log -<n>#其中n表示num,即可得到最后n次提交信息
②通过日期筛选
git log --after="yy-mm-dd"--before="yy-mm-dd"#其中yy表示year,mm表示month,dd表示day,即可得到在指定日期范围内的所有提交信息git log --after="22 days ago"#可得到22天前的提交信息git log --after="2 weeks ago"#可得到2周前的提交信息#after与before可用since和until代替,它们是同义词
③通过作者筛选
git log --author="作者名"#可得到指定作者的提交信息(其中作者名可省略一些字符,因引号内接受一个正则表达式)git log -author="@gmail.com"#可得到使用google邮箱的作者的提交信息
④通过commit时的注释信息筛选
git log --grep="注释"#可得到指定注释信息的提交信息(其中注释可省略一些字符,因引号内接受一个正则表达式)
1.7 比较在暂存区与工作区的差异
gitdiff[文件名]#显示暂存区和工作区的差异gitdiff--cached[文件名]#显示暂存区和上一次提交(commit)的差异#或gitdiff--staged[文件名]gitdiff[commit-id1][commit-id2]#显示两个指定提交间的差异gitdiff[分支名1][分支名2]#显示两个分支间的差异
1.8 回退版本
HEAD说明:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
- …
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD^2 上上一个版本
- HEAD^3 上上上一个版本
- …
git reset HEAD^ #回退所有内容到上一个版本git reset HEAD^ [文件名]#回退指定文件到上一个版本git reset [commit-id]#回退到指定版本git reset --soft HEAD~<n>#回退到前n个版本,其中n表示num,用相应数字填入git reset --hard HEAD #hard参数将撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交,慎用!git checkout -- [文件名]#撤销指定文件的修改,即回到最近一次commit或add时的状态
1.9 在暂存区和工作区删除文件
gitrm[文件名]#删除在暂存区和工作区的指定文件gitrm-f[文件名]#如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -fgitrm--cached[文件名]#如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,则使用 --cached 选项
1.10 在暂存区和工作区重命名文件
gitmv[原文件名][新文件名]#将原文件名改为新文件名gitrm-f[原文件名][新文件名]#如果新文件名已经存在,则必须要用强制重命名选项 -f
2 远程仓库
2.1 查看远程仓库相关信息
git remote #简短列出当前远程仓库的名称git remote --verbose#详细列出当前远程仓库的名称及仓库地址#或git remote -vgit remote show [远程仓库名]#查看某个远程仓库的详细信息(包括仓库地址及分支信息)
2.2 查看远程仓库的分支信息
git branch -r#查看远程仓库的分支信息
2.3 删除远程仓库的分支
git push [远程仓库名]-delete[分支名]#删除远程仓库的指定分支
2.4 删除远程仓库
git remote rm[远程仓库名]#删除指定远程仓库#或git remote remove [远程仓库名]
2.5 修改远程仓库名
git remote rename[原远程仓库名][新远程仓库名]#修改原远程仓库名为新远程仓库名
2.6 修改远程仓库的URL
git remote set-url [远程仓库名][新url]#修改远程仓库的链接为新url
3 本地仓库与远程仓库
3.1 克隆远程仓库的项目到本地仓库
git clone [远程仓库url]#url为远程仓库的HTTPS地址git clone -b[分支名][远程仓库url]#从远程仓库拉取指定的某一个分支,url为远程仓库的HTTPS地址
当使用上述命令克隆一个远程仓库时,远程仓库会被添加一个默认的名字"origin"。
3.2 从远程仓库获取数据到本地仓库
git fetch origin #获取远程仓库的更新到本地(不会合并或修改)git merge #提取获取到的数据并合并到本地仓库的当前分支
以上两句命令时常一起使用。
git pull origin #获取远程仓库的数据并合并到当前分支,等同于fetch+merge命令
3.3 关联本地仓库到服务器仓库
git remote add origin git@ip:your_name/project_name.git #查看本地仓库和远程仓库的所有分支信息
3.4 查看所有分支信息
git branch -a#查看本地仓库和远程仓库的所有分支信息
3.5 同步分支
git fetch #同步远程仓库的分支与本地仓库的分支
3.6 拉取分支
3.6.1 将远程仓库指定分支拉取到本地仓库指定分支
git pull origin [远程分支名]:[本地分支名]
3.6.2 将远程仓库指定分支拉取到本地仓库当前分支
git pull origin [远程分支名]
3.6.3 拉取远程分支并同时创建对应的本地分支
git checkout -b[本地分支名] origin/[远程分支名]
3.7 推送分支
3.7.1 将本地当前分支推送到远程指定分支
git push origin [本地分支名]:[远程分支名]
3.7.2 将本地当前分支推送到与本地当前分支同名的远程分支
git push origin [本地分支名]
3.7.3 强制将本地当前分支推送到与本地当前分支同名的远程分支
git push --force origin [本地分支名]#在本地版本与远程版本有差异的情况下,使用强制推送
版权归原作者 STARBLOCKSHADOW 所有, 如有侵权,请联系我们删除。