文章目录
前言
了解Git基础、Git远程仓库、Git分支、Git标签、Git工作流、以及IDEA使用Git,Git基本命令
一、Git是什么?
Git是一种代码托管技术,在开发中,Git是一种代码托管技术,很多代码托管平台基于Git来实现,例如:版本控制,分支管理
Git是一个开源的分布式版本控制系统
二、Git基础
1.环境配置
安装Git之后首先设置用户名和Email地址
通过以下命令设置信息会保存在~/.gitcinfig文件中(C盘用户)
#设置用户名
$ git config --global user.name "Yolo"
#设置邮箱
$ git config --global user.emal "2451500780@qq.com"
2.本地初始化仓库
代码如下(示例):
#创建tmp目录文件
$ mkdir tmp
#初始化这个目录让Git对这个目录开始版本控制
$ git init
3.文件的两种状态
untracked未跟踪
未跟踪,此文件在文件夹中,但并未加入git库,不参与版本控制,通过 git add 状态变为Staged
tracked已跟踪
- Unmodified
文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致,这种类型的文件有两种去处,如果它被修改而别为Modified,如果使用 git rm 移出版本库,则成为Untracked文件
- Modified
文件已经修改,但仅仅是修改,并没有进行其他操作,这个文件也有两种去处,通过 git add 可进入暂存staged 状态,使用 git checkout 则丢弃修改过的,返回unmodify状态,这个 git checkout 即从库中取出文件,覆盖当前修改
- Staged
暂存状态,执行 git commit 则将修改同步到库中,这是库中的文件和本地文件又变为一致,文件为Unmodify状态,执行 git reset HEAD filename 取消暂存,文件状态变为Modified
注:这些状态会随着我们执行的Git命令发生变化
- 新建文件---->Untracked
- 使用 git add 命令将新建的文件加入到暂存区---->Staged
- 使用 git commit 命令将暂存区文件提交到本地仓库---->Unmodified
- 如果对 Unmodified 状态的文件进行修改---->modified
- 如果对 Unmodified 状态的文件进行remove操作---->Untracked
#创建文件
$ echo "I'am happy" > happy.html
#查看所有命令
$ ll
#简洁输出
$ git status -s
#提交命令、
$ git add
4.文件加入暂存区
#文件加入暂存区
$ git add 文件名
#文件取消暂存区命令
$ git reset 文件名
#把当前所有未跟踪的文件都加入暂存区
$ git add .
5.文件的提交与删除
#文件提交命令
$ git commit -m "提交信息"
- -m:本次提交了做了什么事,只要简单的文本,中英文都可,能让自己以及别人很快明白
- 如果不加 -m,则直接进入类似于 vim 编辑,保存退出命令为:wq
- 执行这个命令的文件必须在暂存区,如果不在则提交不成功
修改commit记录
- 把整个.git目录删除(不建议)
- 使用 git rebase 命令来改动历史记录
- 先把 Commit 用git reset 命令删除,整理后重新Commit
- 使用 --amend 参数改动最后一次的Commit(推荐)
#查看日志文件 $ git log --oneline #修改最后一次日志文件 $ git commit --amend -m "内容" #然后查看已经修改完成
删除文件
删除文件只是删除工作目录下的文件,我们的版本库中还存在,删除整个文件会把这个文件直接放在暂存区
在文件中右击直接删除(状态为红色,暂存区也未删除),
首先 git add .
接着 git commit -m " delete 文件名.后缀"
#删除文件(在git中删除的可以直接恢复)(文件删除暂存区也无但版本库中还存在)
$ git rm 文件名
#直接删除版本库中也无
$ git commit -m "delete 文件名.后缀"
挽救删除的文件或目录
#查询所有文件
$ ls -al
#删除文件
$ rm -rf index.html
#恢复文件
$ git checkout index.html
#删除所有的html文件
$ rm *.html
#删除所有文件全部恢复
$ git checkout .
注:当使用git checkout 命令时,Git会切换到指定的分支,但是如果后面接的是文件名或路径,Git则不会切换分支,而是把文件从.git目录中复制一份到当前的工作目录,更精确的说,这个命令会把暂存区中的内容或文件拿来覆盖工作目录中
注:当使用git checkout . 命令时,不仅可以将删除的文件挽救回来,还能把文件恢复到上一次的Commit的状态,不是所有情况下都能恢复被删除的文件,因为整个Git的记录都是放在根目录下的.git目录中,如果这个目录被删除了,也就意味者历史记录也被删除了,那么删除的文件就不能恢复了
6.文件添加至忽略列
在工作目录中创建一个名为 .gitignore 的文件(文件名是固定的),列出要忽略的文件模式
#创建文件
$ touch .gitignore
#查看所有文件
$ ll -a
#/表示当前文件所在的目录
#忽略public下的所有目录及文件
/public/*
#不忽略/public/assets,就是特例的意思,assets文件不忽略
!/public/assets
# 忽略具体的文件
index.class
# 忽略所有的class
*.class
# 忽略 a.class b.class
[ab].class
注:
- 匹配规则和Linux文件匹配一样
- 以斜杠" / "开头表示目录
- 以星号" * "通配多个字符
- 以问号" ? "通配单个字符
- 以方括号" [ ] "包含单个字符的匹配列表
- 以叹号" ! "表示不忽视(跟踪)匹配到的文件或目录
7.日志记录操作
#查看分支合并图
$ git log --graph
#简写查看所有日志
$ git log
#压缩一行日志文件
$ git log --oneline
#查看所有执行过的命令
$ git reflog
8.比较文件差异
- Git技术中如何显示暂存区和工作区文件的差异:$ git diff
- Git技术中如何对比暂存区和版本库文件的差异:$ git diff --cached
注:
- -- :标记原始文件
- ++ :标记新文件
- @@ :两个不同文件版本的上下文行号
- - :原始文件删除该行
- + :原始文件增加一行
示例:
9.还原文件
修改文件三种情况:
- 只修改了文件,没有任何Git操作
- 只修改文件,并提交到暂存区(即编辑之后,git add 但没有 git commit -m ...)
- 修改了文件,并提交到仓库区(即编辑之后,git add 和 git commit -m ...)
第一种:
#新建一个示例txt文件
$ echo "zheng" >hello.txt
#查看文件内容
$ cat hello.txt
zheng
#将文件提交到暂存区
$ git add .
#将内容提交版本库中
$ git commit -m "zheng"
#修改内容
$ vim hello.txt
#恢复之前文件
$ git checkout -- hello.txt
第二种:
- $ git log --oneline # 可以省略
- $ git reset HEAD # 回退到当前版本
- $ git checkout -- hello.txt # hello.txt为文件名
第三种:类似于2
- $ git log --oneline # 可以省略
- $ git reset HEAD^ # 回退上一个版本
- $ git checkout -- hello.txt # hello.txt为文件名
git reset 版本号 ---- 将暂缓区回退到指定版本,根据 $ git log --oneline 显示的版本号,可以回退到任何一个版本,也可通过 HEAD 来指定版本。
HEAD 当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
总结
常用Git命令
- 初始化仓库:
:git init
用于将当前目录初始化为一个Git本地仓库。 - 查看状态:
:git status
查看本地仓库中文件的状态。 - 添加文件到暂存区:
:git add 文件名
将文件添加到暂存区,准备提交。 - 文件取消暂存区命令:git reset 文件名
- 提交更改:
git commit -m "备注"
将暂存区的文件提交到本地仓库。 - 删除文件: rm -rf 文件名.后缀
- 恢复文件:git checkout 文件名.后缀
- 推送更改到远程仓库:
:git push -u
将本地仓库的更改推送到远程仓库。 - 拉取远程仓库的更改:
:git pull --rebase
从远程仓库拉取最新的更改并合并到本地分支。 - 查看提交历史:
:git log
查看提交历史记录。 - 创建并切换分支:
git checkout -b 分支名
创建一个新的分支并立即切换到该分支。 - 删除分支:
git branch -d 分支名
删除已合并的分支。 - 查看远程仓库设置:
:git remote
查看远程仓库的设置。 - 远程仓库操作:如
git push origin name
推送本地分支到远程仓库,git push origin :heads/name
删除远程分支等。 - 标签操作:如
:git tag name
创建版本标签,git tag -d name
删除版本标签。 - 子模块操作:如
git submodule add url path
添加子模块,git submodule init
和git submodule update
初始化并更新子模块。 - 克隆仓库:
git clone url
从远程仓库克隆项目到本地。