Git 是一个分布式版本控制系统 Distributed Version Control System - DVCS

什么是版本控制 Revision Control

版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了已录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。

Git的工作流程
image.png

image.png

二:核心概念

.git / 工作区 / 暂存区 / 本地仓库 / 远程仓库

关键词

  • 工作区workspace
  • 仓库Repository
    一个仓库包括了所有的版本信息、所有的分支和标记信息。在Git中仓库的每份拷贝都是完整的。仓库让你可以从中取得你的工作副本
  • 暂存区Index/Stage
  • 远程仓库Remote
  • 分支Branches
    一个分支意味着一个独立的、拥有自己历史信息的代码线(code line)。你可以从已有的代码中生成一个新的分支,这个分支与剩余的分支完全独立。默认的分支往往是叫master。用户可以选择一个分支,选择一个分支执行命令git checkout branch.
  • 标记tags
    一个标记指的是某个分支某个特定时间点的状态。通过标记,可以很方便的切换到标记时的状态

.git 目录就是本地仓库 .git 所在的根目录称为 工作区

理论

工作区就是开发时创建的那个目录
.git目录下index 文件 暂存区会记录git add 添加的信息。可以使用git ststus 查看暂存区的状态
如果需要提交到远程仓库,那么git add 提交到暂存区,交给Git管理

三:配置

git最小配置

:::info git config :::

配置Git

  1. # 设置
  2. git config --global user.name "taoya7"
  3. git config --global user.email "569781231@qq.com"
  4. # 取消设置
  5. $ git config --global --unset user.name
  6. $ git config --global --unset user.email
  7. 因为Git是分布式版本控制系统,所以需要配置这些基本参数
  8. global 有什么作用?
  9. Global的三个作用域
  10. git config --local # 只对某个仓库有效
  11. git config --global # 对当前用户所有仓库有效
  12. git config --system # 对系统所有用户有效
  13. 显示config的配置 --list
  14. git config --list --local
  15. git config --list --global
  16. git config --list --system
  1. λ git config --list --local
  2. core.repositoryformatversion=0
  3. core.filemode=false
  4. core.bare=false
  5. core.logallrefupdates=true
  6. core.ignorecase=true
  7. gui.wmstate=normal
  8. gui.geometry=1113x587+64+102 219 266
  9. λ git config --list --global
  10. user.email=569781231@qq.com
  11. user.name=taoya7
  12. winupdater.recentlyseenversion=2.24.1.windows.2

其实配置都是在保存一个文件

  1. cat ~/.gitconfig
  2. cat ~/.gitconfig
  3. [user]
  4. email = 569781231@qq.com
  5. name = taoya7
  6. ...
  7. ...

查看Git信息

  1. # 查看系统配置
  2. git config --list
  3. # 查看用户配置
  4. cat ~/.gitconfig
  5. # 查看当前项目的git配置
  6. cat .git/config
  7. # 查看暂存区的文件
  8. git ls-files
  9. # 查看本地git历史
  10. git reflog
  11. # 查看当前Head的指向
  12. cat .git/HEAD

四:操作

创建一个版本库

版本库又称为仓库repository 。这个仓库的所有文件都可以被Git管理起来。
每个文件的删除、修改、创建。Git都能跟踪。以便任何时间都可以追踪|或者还原

  1. # 创建一个目录当作仓库
  2. mkdir Linis
  3. cd Linis
  4. # 把当前目录变成Git可以管理的仓库
  5. git init
  6. 将文件添加到版本库
  7. # git add 告诉Git 把文件添加到仓库
  8. git add main.txt
  9. # git commit 把文件提交给仓库
  10. git commit -m "Hello Git"
  11. ~ git commit -m "Hello Git"
  12. [master (root-commit) 6a5bf33] Hello Git
  13. 1 file changed, 1 insertion(+)
  14. create mode 100644 main.txt

注释
git commit -m 是后面的输入是本次提交的说明。然后会提示1个文件被改动。 插入了一行内容

认识工作区与暂存区

工作目录经过git add .将数据存入暂存区。然后通过git commit 控制历史记录

📁 Git文件状态

git status

  • hanges not staged for commit
    • 表示得大概就是工作区有该内容,但是缓存区没有,需要我们git add
  • Changes to be committed
    • 一般而言,这个时候,文件放在缓存区了,我们需要git commit
  • nothing to commit, working tree clean
    • 这个时候,我们将本地的代码推送到远端即可

git log - 查看版本历史

git log

默认普通查询

  • git log –-oneline ```shell λ git log —oneline

afbee3a (HEAD -> master) main.css d3f0d1f index.html

  1. - `git log -n[number]`
  2. 查看number条数的log
  3. - `git log –-all`<br />查看所有分支log
  4. ```shell
  5. λ git log --all --oneline
  6. 072a8cb (HEAD -> test) main.js
  7. afbee3a (master) main.css
  8. d3f0d1f index.html
  • git --graph
    图形显示log变化 ```shell λ git log —graph —all
  • commit 072a8cb0778417353a1c9e199e2298c63bc308b8 (test) | Author: taoya7 569781231@qq.com | Date: Thu Mar 12 21:20:28 2020 +0800 | | main.js |
  • commit afbee3ab54945090d73f12ac7d0ceb9d73cb4a66 (HEAD -> master) | Author: taoya7 569781231@qq.com | Date: Thu Mar 12 21:17:53 2020 +0800 | | main.css |
  • commit d3f0d1ff775050cbe08408d954df2ef8ebd0bb65 Author: taoya7 569781231@qq.com Date: Thu Mar 12 21:11:16 2020 +0800

    1. index.html

    ```

  1. $ git log --oneline
  2. --grep="关键字"
  3. --graph
  4. --all
  5. --author "username"
  6. --reverse
  7. -num
  8. -p
  9. --before= 1 day/1 week/1 "2019-06-06"
  10. --after= "2019-06-06"
  11. --stat
  12. --abbrev-commit
  13. --pretty=format:"xxx"

认识.git目录

Git - 图3
HEAD 文件

HEAD告诉我们工作在哪个分支上。

  1. λ cat HEAD
  2. ref: refs/heads/master

可以看到指向master分支
如果我们切换了分支 就会指向切换的分支

  1. λ git checkout test
  2. Switched to branch 'test'
  3. λ cat .git\HEAD
  4. ref: refs/heads/test

config

  1. λ git config --local user.name Lin
  2. λ git config --local user.email 3335215292@qq.com
  3. λ cat .git\config # 查看config内容
  4. [core]
  5. repositoryformatversion = 0
  6. filemode = false
  7. bare = false
  8. logallrefupdates = true
  9. ignorecase = true
  10. [user]
  11. name = Lin
  12. email = 3335215292@qq.com

可以看到config记录了当前用户配置信息
验证一下是否正确

  1. λ git config --local user.name # 查看
  2. Lin
  3. λ git config --local user.name linis # 修改
  4. λ cat .git\config # 再次验证
  5. [core]
  6. repositoryformatversion = 0
  7. filemode = false
  8. bare = false
  9. logallrefupdates = true
  10. ignorecase = true
  11. [user]
  12. name = linis
  13. email = 3335215292@qq.com

refs

  1. λ cat refs
  2. ├─heads # 显示当前分支
  3. └─tags # 显示当前的标签/里程碑
  1. λ ls heads # 看一下heads目录有什么。显示了当前分支文件
  2. master test

image.png

  1. λ cat master # 可以看到
  2. f5ce33184c88030368c3ceb6c83f2ca7b3ce7b21
  3. λ cat test
  4. 072a8cb0778417353a1c9e199e2298c63bc308b8

看下对象类型

  1. λ git cat-file -t master # 参数-t 查看类型
  2. commit # commit 类型
  3. λ git branch -av # 再看一看分支信息
  4. * master f5ce331 Js
  5. test 072a8cb main.js
  6. 所以很长的字符串哈希指向分支

objects
image.png

可以看到有两个字符组成的目录有很多

  1. λ cd 8d # 进入目录
  2. λ ls # 查看信息
  3. 935a675437050658c06d1b375732b184694893
  4. λ git cat-file -p 8d935a6754370506 # 目录名称+查看的信息 参数-p 查看内容
  5. 100644 blob 190a18037c64c43e6b11489df4bf0b9eb6d2c9bf index.html
  6. λ git cat-file -t 8d935a6754370506 # 查看类型
  7. tree # 树类型
  8. 好像发现了什么,我们再次查看这个哈希内容,发现index.html的内容呈现了出来
  9. git cat-file -p 190a18037c64c43e6b11489df4bf0b9eb6d2c9bf

核心对象: commit / tree / blob对象

Git - 图6
git commit是我们经常使用的命令那么提交究竟做了什么呢?

一个commit对应一颗树,存放了本项目所有文件夹与文件的快照。文件夹是tree对象,具体的文件是blob对象。

  1. git log # 查看历史记录
  2. commit afbee3ab54945090d73f12ac7d0ceb9d73cb4a66 # 字符串哈希
  3. Author: taoya7 <569781231@qq.com> # 作者 - 邮箱
  4. Date: Thu Mar 12 21:17:53 2020 +0800 # 提交时间
  5. main.css # 提交的内容
  6. λ git cat-file -p afbee3ab54945090d73f12ac7d0ceb9d73cb4a66 # 查看commit对象的哈希
  7. tree 11ac1ba9bec772002a5b62bb279b52426c71ec15
  8. parent d3f0d1ff775050cbe08408d954df2ef8ebd0bb65
  9. author taoya7 <569781231@qq.com> 1584019073 +0800
  10. committer taoya7 <569781231@qq.com> 1584019073 +0800
  11. main.css
  12. # 再次查看一下这个tree树里面有什么
  13. λ git cat-file -p 11ac1ba9bec772002a5b62bb279b52426c71ec15
  14. 100644 blob 190a18037c64c43e6b11489df4bf0b9eb6d2c9bf index.html
  15. 100644 blob cae4b4e8368d2825a81a42e4a68fb2cbc38d4257 main.css # 可以看到提交的内容
  16. ---
  17. # 查看blob文件的内容
  18. λ git cat-file -p cae4b4e8368d2825a81a42e4a68fb2cbc38d4257
  19. body{backgroun:red}
  20. λ git cat-file -p 190a18037c64c43e6b11489df4bf0b9eb6d2c9bf
  21. 123

哇! 神奇!

例子

image.png


分离头指针

Head 本来指向分支。 但是如果我们当他指向一个commit。 本意就是当前工作在一个没有分支的状态下。

解决方案:
如果想要修改,请与分支挂钩。在分支的基础上,对分支进行变更。

示例

  1. λ git branch -av # 可以看到目前在master分支
  2. * master f5ce331 Js
  3. test 072a8cb main.js
  4. λ git log
  5. commit f5ce33184c88030368c3ceb6c83f2ca7b3ce7b21 (HEAD -> master) # 看到HEAD 指向master分支
  6. Author: taoya7 <569781231@qq.com>
  7. Date: Thu Mar 12 21:31:53 2020 +0800
  8. Js
  9. ...
  10. ...
  11. ...

如果突然我们对某个commit感兴趣。那么进行如下操作

  1. git checkout afbee3ab54945090
  2. Note: switching to 'afbee3ab54945090'. # 正在切换
  3. You are in 'detached HEAD' state. You can look around, make experimental
  4. changes and commit them, and you can discard any commits you make in this
  5. state without impacting any branches by switching back to a branch.
  6. 正在处于分离头指针状态。你可以做一些变更然后产生commit 或者你也可以把生成的commit丢弃掉。
  7. If you want to create a new branch to retain commits you create, you may
  8. do so (now or later) by using -c with the switch command. Example:
  9. git switch -c <new-branch-name>
  10. Or undo this operation with:
  11. git switch -
  12. Turn off this advice by setting config variable advice.detachedHead to false
  13. HEAD is now at afbee3a main.css
  1. λ git branch # 查看分支
  2. * (HEAD detached at afbee3a)
  3. master
  4. test
  5. # 那么我们做一些修改然后提交它
  6. λ git commit -am "Bg to #000"
  7. # 然后看一下log
  8. λ git log
  9. commit bf6cd825a86d47f4265e99e6320c29169ad55f72 (HEAD) # 看到了HEAD 没有与分支绑定在一起
  10. Author: linis <3335215292@qq.com>
  11. Date: Thu Mar 12 22:48:16 2020 +0800
  12. Bg to #000
  13. # 那么我们现在切换一下分支
  14. λ git checkout master
  15. Warning: you are leaving 1 commit behind, not connected to
  16. any of your branches:
  17. bf6cd82 Bg to #000
  18. If you want to keep it by creating a new branch, this may be a good time
  19. to do so with:
  20. git branch <new-branch-name> bf6cd82
  21. Switched to branch 'master'
  22. 看到git提示了一个warning信息。
  23. git log # 并没有出现刚才哪个log
  24. 那么我们如何解决呢?
  25. git branch <new-branch-name> bf6cd82 # 我们为他再创建一个分支
  26. # 然后查看一下log
  27. git log --all

解决
image.png

  1. Git git:(c41b1f4) git branch new c41b1f4

😳 如何修改commit的message

最新的commit的变更

  1. λ git commit --amend

老旧的commit的变更
如果想要修改此commit -i 后面的哈希是父commit哈希

  1. git rebase -i [字符串哈希]

:合并commit

对多次的commit合并成一个commit
git rebase -i [字符串哈希]
然后将pick修改为s
λ git rebase -i d3f0d1ff775050

[detached HEAD 7c90c36] main.css
Author: taoya7 569781231@qq.com
Date: Thu Mar 12 21:17:53 2020 +0800
3 files changed, 3 insertions(+)
create mode 100644 main.css
create mode 100644 main.js
create mode 100644 master)
Successfully rebased and updated refs/heads/master.

如何把间隔几个的commit合成

先看一下git log
C:\Users\Administrator\Desktop\test (master -> origin)
λ git log
commit 60e3d51a9ce25c14e672c2b4f7504bed7a6d7b12 (HEAD -> master)
Author: linis 3335215292@qq.com
Date: Thu Mar 12 23:21:58 2020 +0800

  1. d

commit e5b652a75418811b3ad2b5b98d5f6a8d169d8158
Author: linis 3335215292@qq.com
Date: Thu Mar 12 23:21:42 2020 +0800

  1. c

commit 51624d6dd84b162ddc3d38e4950f3f2fbf6ac410
Author: linis 3335215292@qq.com
Date: Thu Mar 12 23:21:18 2020 +0800

  1. b

commit 923807fc8e3eeaede9eeb510c93bee070f3619b4
Author: linis 3335215292@qq.com
Date: Thu Mar 12 23:20:59 2020 +0800

  1. a<br />可以看到一共四次提交<br />现在的要求是把a,d 整理成一个
  1. 把第一个commit保留下来 pick
  2. 把最后一个commit 修改为s 放在第一个后面

git rebase -i 923807fc8e # 此处a的commit

以前的信息
pick 51624d6 b
pick e5b652a ‘c’
pick 60e3d51 d

Rebase 923807f..60e3d51 onto 923807f (3 commands)

—-
# 修改后的信息
pick 923807f 整理后的a
s 60e3d51
pick 51624d6 b
pick e5b652a ‘c’


:回退reset

现在修改一下刚才创建的文件。
然后查看一下状态
git status - 查看仓库的状态
Git - 图9
可以通过git status得知哪些文件被修改过
~ git status

On branch master
Changes not staged for commit:
(use “git add …” to update what will be committed) # 将要被提交
(use “git restore …” to discard changes in working directo
modified: main.txt

no changes added to commit (use “git add” and/or “git commit -a”)
可以得出信息:

  1. 当前的分支master
  2. 有改变的文件但是没有提交modified。 Git 已经认识这个文件了,它不是个新文件,但它有了一些改动。所以虽然状态的显示有点不同,但处理方式还是一样的

git diff - 查看修改的变化

~ git diff
diff —git a/main.txt b/main.txt
index 56b6510..699568b 100644
—- a/main.txt
+++ b/main.txt
@@ -1 +1,2 @@
-11111
\ No newline at end of file
+11111
+22222
\ No newline at end of file

git log - 查看历史记录

~ git log

commit 8c793a7aca934a6980a27fb2694bc17f19b54a62 (HEAD -> master)
Author: taoya7 569781231@qq.com
Date: Wed Dec 18 19:48:11 2019 +0800

  1. 2

commit 6a5bf332baf8edf82fba4d7b71e7dd78827f0f4f - 注释 这是版本号
Author: taoya7 569781231@qq.com
Date: Wed Dec 18 19:37:19 2019 +0800

  1. Hello Git<br />显示了最近到最远的提交日志

版本记录HEAD

?> 回退版本
首先要让Git知道哪个当前的版本。Git中用Head 代表当前版本。上一个版本就是HEAD^ 上上一个版本就是HEAD^^
简洁写法HEAD~100
git reset —hard HEAD^ # 回退到上个版本
例子
~ git log

commit 8c793a7aca934a6980a27fb2694bc17f19b54a62 (HEAD -> master)
Author: taoya7 569781231@qq.com
Date: Wed Dec 18 19:48:11 2019 +0800

  1. 2

commit 6a5bf332baf8edf82fba4d7b71e7dd78827f0f4f
Author: taoya7 569781231@qq.com
Date: Wed Dec 18 19:37:19 2019 +0800

  1. Hello Git<br /> <br />~ git reset --hard HEAD~1

HEAD is now at 6a5bf33 Hello Git
?> 回退到具体的版本号
git reset --hard ____版本号___
?> 后悔药
git reflog查看命令历史,以便确定要回到未来的哪个版本
~ git reflog
6a5bf33 (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1
8c793a7 HEAD@{1}: reset: moving to HEAD
8c793a7 HEAD@{2}: reset: moving to HEAD
8c793a7 HEAD@{3}: reset: moving to HEAD
8c793a7 HEAD@{4}: commit: 2
6a5bf33 (HEAD -> master) HEAD@{5}: commit (initial): Hello Git


删除文件

一般情况下,通常在文件管理器中把没用的文件删了。这个时候Git知道你删除了文件。
工作区和版本库就不一致了。git status 会立刻知道你哪些文件被删除了
git status

C:\Users\Administrator\Desktop\try>git status
On branch master
Changes not staged for commit:
(use “git add/rm …” to update what will be committed)
(use “git restore …” to discard changes in working directo
deleted: main.txt

no changes added to commit (use “git add” and/or “git commit -a”)
所以那么我们如何获取刚才已经删除掉的文件呢?
git chechout — main.txt
!> git checkout
其实是用版本库里的版本替换工作区的版本。无论工作区是修改还是删除,都可以还原

文件信息

显示当前分支的版本历史
$ git log

λ git log
commit 12272f264a5d5b7af54a51f7ad707622dc00ce2d (HEAD -> master, tag: v1.0)
Author: taoya7 569781231@qq.com
Date: Tue Mar 10 16:43:29 2020 +0800

  1. ''Firsy<br /># 显示commit历史 以及每次commit 发生变更的文件<br />git log --stat<br /># 搜索提交历史,根据关键词<br />git log -S [keyword]<br /># 显示当前分支的版本历史<br />$ git log<br /># 显示commit历史,以及每次commit发生变更的文件<br />$ git log --stat<br /># 搜索提交历史,根据关键词<br />$ git log -S [keyword]<br /># 显示某个commit之后的所有变动,每个commit占据一行<br />$ git log [tag] HEAD --pretty=format:%s<br /># 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件<br />$ git log [tag] HEAD --grep feature<br /># 显示某个文件的版本历史,包括文件改名<br />$ git log --follow [file]<br />$ git whatchanged [file]<br /># 显示指定文件相关的每一次diff<br />$ git log -p [file]<br /># 显示过去5次提交<br />$ git log -5 --pretty --oneline<br /># 显示所有提交过的用户,按提交次数排序<br />$ git shortlog -sn<br /># 显示指定文件是什么人在什么时间修改过<br />$ git blame [file]<br /># 显示暂存区和工作区的差异<br />$ git diff<br /># 显示暂存区和上一个commit的差异<br />$ git diff --cached [file]<br /># 显示工作区与当前分支最新commit之间的差异<br />$ git diff HEAD<br /># 显示两次提交之间的差异<br />$ git diff [first-branch]...[second-branch]<br /># 显示今天你写了多少行代码<br />$ git diff --shortstat "@{0 day ago}"<br /># 显示某次提交的元数据和内容变化<br />$ git show [commit]<br /># 显示某次提交发生变化的文件<br />$ git show --name-only [commit]<br /># 显示某次提交时,某个文件的内容<br />$ git show [commit]:[filename]

远程仓库

GitHub这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库

本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置

  1. 创建SSH Key

ssh-keygen -t rsa -C “569781231@qq.com”

  1. 找到公钥
    .ssh/
    Git - 图10
  2. 登录GitHub设置里 ,将公钥给设置上

Git - 图11

从远程库克隆

首先知道仓库的地址,然后使用git clone ___ 就可以克隆了。 Git支持多种协议https ssh git
git clone 仓库地址

🏷️ 分支 - Branch

分支有什么用?
git中默认的分支是master 。单分支的开发不满足我们的要求。

比如 你突然接到一个电话说有个很严重的问题需要紧急修补。 你将按照如下方式来处理:

  1. 切换到你的线上分支(production branch)。
  2. 为这个紧急任务新建一个分支,并在其中修复它。
  3. 在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。
  4. 切换回你最初工作的分支上,继续工作。

创建分支
创建一个分支并留在当前分支

  1. git branch [branchName]

创建一个分支,并切换到该分支

  1. git checkout -b [branch]

切换到上一个分支

  1. git checkout -

删除分支

  1. git branch -d [branchName]

删除远程分支

  1. git push origin --delete [branch-name]
  2. git branch -dr [remote/branch]

修改分支

  1. git branch -m oldName newName

查看分支
列出所有本地分支

  1. git branch

-r 列出所有远程分支
-a 列出所有本地分支和远程分支

切换分支

  1. V1
  2. git checkout branckName
  3. V2
  4. git switch -c dev

分支合并
当前分支与指定分支合并
注意,合并前,俩个版本都要提交到本地版本库

  1. git merge branchName

快速创建分支切换分支

  1. git checkout -b branchName

下载指定分支文件

  1. git clone -b branchName git_pass

实践

  1. # 创建并切换一个分支
  2. ~ git checkout -b dev
  3. Switched to a new branch 'dev'
  4. # 查看当前的分支
  5. ~ git branch
  6. * dev
  7. master
  8. # 对文件进行操作中...
  9. git add .
  10. git commit -m "xxx"
  11. git add .
  12. git commit -m "xxx"
  13. # 切换分支master
  14. git checkout master

查看刚才的文件发现刚才添加的内容不见了。
- 因为刚才的提交都是dev分支上的操作
- 当前master的分支并没有变化
Git - 图12

  1. ~ git merge dev
  2. Updating 8c793a7..79e13c0
  3. Fast-forward
  4. main.txt | 4 +++-
  5. 1 file changed, 3 insertions(+), 1 deletion(-)
  6. git merge 可以合并指定分支到当前分支。

🏷️ fetch指令

image.png

将远程仓库内容更新到本地

  1. git fetch origin <branch-name>:<local-branch-name>
  • 一般而言,这个origin是远程主机名,一般默认就是origin。
  • branch-name 你要拉取的分支
  • local-branch-name 通常而言,就是你本地新建一个新分支,将origin下的某个分支代码下载到本地分支。

将某个远程主机的更新,全部取回本地

  1. git fetch <远程主机名>

取回的是所有的分支更新,如果想取回特定分支,可以指定分支名👇

  1. git fetch <远程主机名> <分支名>
  • 当你想将某个分支的内容取回到本地下某个分支的话,如下👇
    1. git fetch origin :<local-branch-name>
    2. // 等价于👇
    3. git fetch origin master:<local-branch-name>

🏷️ 撤退

image.png

  • 撤销工作区修改
    • git checkout —
  • 暂存区文件撤销 (不覆盖工作区)
    • git reset HEAD
  • 版本回退
    • git reset —(soft | mixed | hard ) < HEAD ~(num) > |
指令 作用范围
—hard 回退全部,包括HEAD,index,working tree
—mixed 回退部分,包括HEAD,index
—soft 只回退HEAD

🏷️ 标签管理-tag

tag 是一个让人容易记住的有意义的名字,它跟commit绑定在一起
标签的作用主要是用来做版本回退的。
创建标签

  1. git tag <tagName>
  1. # 查看分支信息
  2. ~ git branch
  3. # 切换分支
  4. git checkout master
  5. # 创建标签
  6. git tag v1.0
  7. 默认是在最新提交的commit上的。

查看标签
git tag - 查看所有的标签

  1. ~ git tag
  2. v1.0
  3. git show [tagname] 查看标签信息
  4. git show v1.0
  5. commit 79e13c07d4f0355b52e74ee69c2d503cc96ca89a (HEAD -> master, tag: v1.0, dev)
  6. Author: taoya7 <569781231@qq.com>
  7. Date: Wed Dec 18 21:03:28 2019 +0800
  8. 4
  9. diff --git a/main.txt b/main.txt
  10. index 7ec99b8..720ac69 100644
  11. --- a/main.txt
  12. +++ b/main.txt
  13. @@ -1,3 +1,4 @@
  14. 11111
  15. 22222
  16. -33333
  17. \ No newline at end of file
  18. +33333
  19. +44444
  20. \ No newline at end of file

创建tag

  1. 新建一个tag在当前commit
  2. git tag [tag]

删除本地tag

  1. git tag -d [tag-name]

指定标签信息

  1. git tag -a <tagName> -m "xxx"

删除标签
git tag -d 标签名

  1. git tag -d v1.0
  2. Deleted tag 'v1.0' (was 79e13c0)

根据标签推送
git push origin

  • 命令git push origin可以推送一个本地标签;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d可以删除一个本地标签;
  • 命令git push origin :refs/tags/可以删除一个远程标签。

    自定义Git

    忽略特殊文件上传 - gitignore

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们
    .gitignore 文件
    在Git工作区的根目录下创建一个特殊的.gitignore文件。
    .gitignore 是 Git 仓库中的一个特殊的文本文件,它里面记录了你不希望提交到仓库的目录和文件的名称或类型
    忽略文件的原则是:
  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

    共享仓库多人协作开发

    Clone
    上传代码push
    下拉代码pull
    冲突
    解决冲突

    五:例子

    上传本地项目到Github

  • 创建本地项目
  • 建立本地仓库

    • git init //把这个目录变成Git可以管理的仓库
    • git add README.md //将文件添加到仓库
    • git add .//不但可以跟单一文件,还可以跟通配符,更可以跟目录。一个点就把当前目录下所有未追踪的文件全部add了
    • git commit -m "提交说明" //把文件提交到仓库
    • git remote add origin [https://github.com/taoya7/MyNote.git](https://github.com/taoya7/MyNote.git) //关联远程仓库
    • git push -u origin master //把本地库的所有内容推送到远程库上
      1. git init
      2. git add *
      3. git commit -m [message]
      4. git remote add origin git@...com
      5. # 首次推送需要加上-u,之后推送就可以直接git push origin master
      6. # origin是远程Git名字,这个可以自己定义,不过一般是用origin罢了
      7. # master是默认的分支,如果不在master分支提交需要写清楚分支名称
      8. git push -u origin master

      删除在Github上的文件

      如果此文件夹已被加入git追踪,那么删除方法很简单,只需要将此文件夹删掉,然后提交一下就可以了

      六:常用命令

      Git - 图15

      七: 开发工具使用Git

      Ⅷ:周边插件

      VSCode
  • GitLens — Git supercharged

  • Git History

image.png