Git使用介绍


1.Git基本概念——工作区域和状态


1.1.工作区域

Git仓库:用来保存项目的元数据和对象数据库的地方,克隆仓库指的就是克隆这里的数据。

工作目录(工作区):是对项目的某个版本独立提取出来的内容,可以在这基础上进行文件的修改。

暂存区域(暂存区):一个保存了下次将提交的文件列表信息的文件。

1.2.状态

已提交(committed):表示数据已经安全的 保存在本地仓库中。

已修改(modified):表示修改了文件,但还没保存到本地仓库中。

已暂存(staged):表示对一个已修改文件的当前 版本做了标记,使之包含在下次提交的快照中。


2.Git工作流程


基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
image.png

3.Git基础命令


3.1 初始设置

git config --global user.name aaabbbccc  # 配置用户名
git config --global user.email aaabbbccc@qq.com  # 配置邮箱

通过 git config 设置一个用户名和邮箱,并且通过 ==git config --list== 查看相关初始配置信息, 这个信息主要用来告诉Git当前的操作者是谁。

$ git config --list
core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=D:/git/Git/mingw32/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
pack.packsizelimit=2g
credential.helper=manager
user.name=aaabbbccc
user.email=aaabbbccc@qq.com

设置成功后就能在配置中看到设置后的用户名及邮箱。

3.2 初始化本地仓库

git init
  • 通过命令 git init将一个目录变成git可以管理的仓库,这时候你当前目录下会多了一个.git的目录。这个目录是Git来跟踪管理版本的,不要乱改这个目录里面的文件,否则,会把git仓库破坏。

3.3 查看git仓库当前状态

git status
image.png
  • 通过该命令,可以查看当前目录下,文件处于什么状态。
    1. 处于工作区未被追踪(untracked)
    2. 位于暂存区等待提交至仓库(changes to be commited)
    3. 在工作区中修改了但没有提交至暂存区(modified)
    4. 已经提交至本地仓库中(commited)

3.4 将文件从工作区提交至暂存区

 git add .     # 将所有文件添加到暂存区
 git add 具体文件名        # 添加具体文件到暂存区

git add命令是从工作区添加文件到暂存区中,等待上传或保存。

3.5 将文件从暂存区提交至仓库

git commit -m ''  
  • 通过commit命令将暂存区的文件提交保存至仓库中。-m参数代表添加注释,""引号内添加注释内容
  • 如果没有设置git用户名及邮箱,在commit时会提示(please tell me who you are),出现此提示代表还有没有配置初始用户名等设置。

3.6 查看git日志

git log

使用git log 命令查看所有提交至仓库的操作。

日常操作步骤

日常操作步骤为:

  • [ ] - git init 初始化仓库
  • [ ] - git add . 将文件添加至缓存区
  • [ ] - git commit -m 将文件上传至仓库

4.撤销操作


4.1 将工作区中文件的改动撤销(适用于工作区修改,未提交至暂存区)

  • 可以先通过git status命令查看工作区中有哪些文件进行了修改但还没有提交至暂存区的(即状态为modified)。
git checkout --具体文件名    # 还原某个修改过的具体文件 
git checkout .     # 还原所有修改过的文件

通过git checkout 命令将在工作区中修改但还没有提交至暂存区的文件撤销至未修改前的状态。

4.2 将暂存区中文件的改动撤销(适用于已提交至暂存区)

  • 当文件改动已提交至暂存区后就不能再使用git checkout 命令来撤销改动,此时要通过 git reset命令撤销位于暂存区中的改动。
  • 可以先通过git status命令查看处于暂存区中的文件(即状态为changes to be commited)。
git reset .    # 还原所有已提交至暂存区的文件至工作区
git reset HEAD 具体文件名    # 还原某个已提交至暂存区的具体文件至工作区

当文件从暂存区还原至工作区后,再使用 git checkout 命令将工作区中的改动撤销。

4.3 撤销上一次提交至仓库中的操作,并将暂存区的文件重新提交至仓库

git commit --amend
  • 当希望对上一次提交至仓库中的文件进行修改而不产生新的版本时,使用 git commit --amend命令。使用此命令时首先将希望修改的文件内容提交至暂存区中再使用此命令,即可覆盖最新的版本而不产生新的版本。

5.删除操作


5.1 手动删除文件

  • 当文件进行手动删除后,使用命令 git status 可查询到删除的文件。在下面的例子中,我们首先在工作目录下手动删除了aaa.html文件。
image.png

上面代码可以看出,文件的改动是未提交至暂存区及仓库的,手动删除文件后需要执行commit操作将改动提交至仓库。

5.2 使用 rm 命令在git中删除文件

git rm 文件名
  • 直接使用 git rm 命令将指定文件删除,会删除暂存区中的该文件,同时工作目录中的该文件也将被删除
image.png

使用 git status 查看状态,可以看到该删除文件处于暂存区中,使用git commit将改动保存到本地仓库中,也可以使用 git reset 命令将改动撤销至工作区,再使用git checkout将改动撤回。

git rm --cached 文件名
  • 在 rm 命令后加上 --cached 参数,只会将文件删除提交至暂存区,并等待提交至本地仓库。
image.png

当加上 --cached 参数后,会产生上图所示的结果,git会认为是删除了一个名为aaa.xlsl的文件,并提交至暂存区中,并且新创建了一个名为aaa.xlsx的文件处于未追踪状态。


6.git分支


6.1 查看当前所有分支

  • 使用 git branch 命令查看当前所有分支
 git branch

6.2 创建新分支

  • 使用 git branch dev 命令创建一个名为dev的分支
git branch 分支名

6.3 切换分支名

  • 使用 git checkout dev 命令切换至dev分支
git checkout 分支名
  • [x] !注意checkout命令用于 ++切换分支++ 及 ++撤销操作++ 的区别。

6.4 删除分支

  • 使用 git branch -d dev 命令删除dev分支
git branch -d 分支名
  • 如果当前处于 dev 分支,想要删除dev分支就会失败并报错,必须切换到其他分支才能删除dev分支。
image.png

7.代码合并


7.1 存在冲突时的合并

  1. 在master分支上创建一个 git_test.html 文件, 并提交保存至仓库中。
<!--git_test.html on master-->

<!DOCTYPE html>
<html lang="en">
<head>
    ...
</head>
<body>
    <p>这是master分支啊</p>
</body>
</html>
  1. 创建一个dev分支并切换到 dev 分支,在dev分支同样创建一个 git_test.html,并提交保存至仓库中。
<!--git_test.html on dev-->

<!DOCTYPE html>
<html lang="en">
<head>
    ...
</head>
<body>
    <p>这是dev分支啊</p>
</body>
</html>

3.切换回 master 分支,使用 git merge 命令将 dev 分支上的代码合并至 master 分支。

image.png

提示两个分支中有同名文件 git_test.html 存在冲突,自动合并失败,需要手动合并冲突后再提交。

  1. 打开 git_test.html 文件后,文件变成下面的样子:


    image.png

合并的同名文件存在差异时,git会将文件分为三个部分:
1. 从 HEAD 到 ======
2. 从 ====== 到 >>>>>>>
3. 在 >>>>>>> merge code 后的部分

前两部分为合并时同名文件的差异部分,在>>>>>>> merge code后的部分为两个文件相同的部分。

只需要将代码中不相同的那两部分进行统一,合并成一个结果即可。
  1. 将差异处理并保存后,重新进行提交,完成合并。

7.2 不存在冲突时的合并(快进式合并)

  1. 在master分支上创建一个 git_test.html 文件, 并提交保存至仓库中。
<!--git_test.html on master-->

<!DOCTYPE html>
<html lang="en">
<head>
    ...
</head>
<body>
    <p>这是master分支啊</p>
</body>
</html>
  1. 创建一个 fix 分支并切换到 fix 分支,在 fix 分支同样创建一个 git_test.html,并提交保存至仓库中。
<!--git_test.html on fix-->

<!DOCTYPE html>
<html lang="en">
<head>
    ...
</head>
<body>
    <p>这是dev分支啊</p>
    <p>这是添加的内容</p>   
</body>
</html>
  1. 切换回 master 分支,使用 git merge 命令将 fix 分支上的代码合并至 master 分支。此时代码没有冲突,将直接合并成功,合并后代码显示为:
<!--git_test.html on master-->

<!DOCTYPE html>
<html lang="en">
<head>
    ...
</head>
<body>
    <p>这是dev分支啊</p>
    <p>这是添加的内容</p>   
</body>
</html>

8.差异比较


8.1 工作区与暂存区的差异比较

  • 使用 git diff 命令比较工作区与暂存区之间的差异。
git diff

8.2 暂存区与版本库的差异比较

  • 使用 git diff --cached 命令比较暂存区与版本库之间的差异。
git diff --cached

8.3 不同版本之间的比较

  • 使用 git diff [版本1-id] [版本2-id] 比较两个版本之间的差异。(通过git log --oneline查看相应的版本id)
# 比较版本622e836与895af11之间的差异

git diff 622e836 895af11 

8.4 不同分支之间的比较

  • 使用 git diff [分支名] 比较两个分支间的差异。假如当前处于master分支下:
git diff dev

上述命令将比较master分支与dev分支之间的差异。

8.5 工作区与版本库之间的比较

  • 使用 git diff HEAD 比较工作区与版本库之间的差异。
git diff HEAD

上述命令将比较master分支与dev分支之间的差异。


9.git help文档


9.1 当对某个命令不熟悉时,可以使用 git help 命令后接不熟悉的命令名称,查看该命令的使用方法。比如对 log 命令不熟:

git help log    # 查看log命令的使用方法
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,468评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,620评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,427评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,160评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,197评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,334评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,775评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,444评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,628评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,459评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,508评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,210评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,767评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,850评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,076评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,627评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,196评论 2 341

推荐阅读更多精彩内容