Git 秒会

发布于:2022-12-12 ⋅ 阅读:(389) ⋅ 点赞:(0)

git 是非常灵活的 项目管理工具,灵活主要体现在 同一个 操作 可以通过 不同的 方式实现。
以下介绍几个核心概念:
在这里插入图片描述

  • Workspace:工作区,文件编辑的地方
  • Index / Stage:暂存区,.git目录下的index文件, 暂存区会记录git add添加文件的相关信息
  • Repository:本地仓库,git commit后同步index的目录树到本地仓库
  • Remote:远程仓库

^_^ git安装

sudo apt install git  # 开始安装
git --version  

^_^ 本地仓 和 远程仓 的 连接

add方式 建立 连接

git init 
git add .
git commit -m "..."
git remote add origin 远程仓地址(https 或 ssh)
git push -u origin master
git push
git pull

说明:

  • -u 参数说明:是 --set-upstream 的简写,作用是 关联分支 。
    以后 git push 就能默认找到 关联分支 master;
  • add . 和 add * 是有区别的,add . 在添加文件的时候,会根据 .gitignore文件做过滤
  • 强推送: git push -u origin master -f 的后果是:本次推送的内容会覆盖点 该分之下原有的内容及推送记录。
  • push 和 pull 都是默认的关联分支,如果想 推送 和 拉取 非关联分支,那就得指定一下: git push origin dev

克隆方式建立连接

git clone 远程仓地址(https 或 ssh)

删除连接

git remote rm origin

查看连接aaa.txt

git remote -v

说明:
如果是 https:// 就是采用的是https方式;
如果是 git@ 就是采用的是 ssh 的方式;
若是什么都不返回说明 没有和 远程建立连接

扩展: 操作git钩子

git 在 commit 或 push 之前都会调用一个钩子,如不想用这个钩子,只需将相应的文件夹改个名字
例如,不想在 commit 时 进行js的语法检测:
cd .git/hooks
mv pre-commit pre-commit123
完成



^_^ commit版本迭代

1. 查看 commit推送记录

# 缩略展示
git log --oneline

# 只看 指定用户的 推送记录
git log --author=WangHaiOu

# 只看 指定日志 之前的推送记录

git log --before='2022-08-22'

说明:

  • 每个commit都有对应唯一的commitID
  • 每次commit就相当于是一个版本

2. 版本回退

git reset --hard HEAD^   # 回到上个版本
git reset --hard HEAD^^  # 回到上上个版本
git reset --hard commitID  # 回到指定的版本

git reflog  # 查看 操作版本 的记录

3. 版本标签

git tag v1.0  # 给当前最新的头版本打上标签 v1.0
git tag v1.0 commitID  # 给指定版本打上标签 
git tag  # 查看打的所有标签aaa.txtaaa.txt
git show v1.0   # 查看 v1.0 版本的具体信息
git tag -d v1.0  # 删除v1.0版本标签(打该标签的版本无任何影响)

4. 版本区别 git diff

使用git比较两次commit之间的差异文件
commitHash1 是先于 commitHash2 提交的哈希值

git diff  commitHash1  commitHash2  --stat  // 查看哪些文件是有改动的
git diff  commitHash1  commitHash2  src/views/home/Home.vue // 查看文件具体改动的内容

5. 冲突合并

拉取的 内容 和 我们 最新 commit 后的内容 产生冲突时, 要进行 冲突处理。

# step1: 查看是否有 冲突的 文件
git diff --check
===》 以下显示 冲突的文件 和 位置
aaa.txt:3: leftover conflict marker
aaa.txt:5: leftover conflict marker
aaa.txt:7: leftover conflict marker

# 在vscode中看到的aaa.txt是这样的:
1 func aaa() {
2         this is aaa is name tom
3 <<<<<<< HEAD
4     this is add tom123
5 =======
6     this is add cat123
7 >>>>>>> 74ae07ab9aaef1651f3029e4c3fac4d5482bde64
8     this is hahaah
9 }

# step2: 合并冲突, 通过 vim 处理冲突,以上冲突 合并 可以删除 第 3,4,5,7行。
vim aaa.txt
# 推荐使用 vscode 进行处理,方便省心。

6. 改动查看 git show

  • 查看改动 的 文件信息:
# 1.查看最后一次提交记录的修改文件信息git show --raw



# 2.查看指定commit id对应修改文件列表git show --raw commit_id


######### 输出: 
:100644 100644 e562209 7eab101 M        pkg/logger/logger.go
:100644 100644 fff176c 86f72e6 D        pkg/setting/section.go
:100644 100644 586daa9 80f292b A        pkg/setting/setting.go
:100644 100644 dca125f 254e8ad M        pkg/tracer/tracer.go
:100644 100644 db5ce21 5bc1eb2 M        storage/logs/app.log

输出说明: ===> M:修改 A:增加 D:删除

  • 查看改动 的 文件 内容信息:
# 1.查看最后一次提交记录的修改
git show 

# 2.查看指定commit id对应的修改
git show commit_id
# 3.查看指定commit id对应的 特某文件 的 修改
git show commitId fileName


######### 输出:
commit 2447e2b9c15472f2ead7bf451aa5f11111111112 (HEAD -> master)
Author: aaa <aaa@163.com>
Date:   Sun Aug 21 15:22:08 2022 +0800

    update example data
    
# 第一行 -------------------
diff --git a/name.txt b/name.txt
# 第二行 -------------------
index ac37a53..0ed306a 100644
# 第三行 -------------------
--- a/name.txt
+++ b/name.txt
# 第四行 -------------------
@@ -1,4 +1,4 @@
 tom
-alice
+jerry
 bily
 andy
 # 第五行 -------------------
\ No newline at end of file

diff --git a/age.txt b/age.txt
......
\ No newline at end of file

输出说明:

  • 第一行: diff --git a/name.txt b/name.txt
    该行是说:接下来 展示中,以 a/name.txt 代表修改之的文件名, 以 b/name.txt 代表修改之的文件名。
  • 第二行:index ac37a53…0ed306a 100644
    ac37a53: 修改之前的 文件对象; 0ed306a:修改只会的文件对象。
    100644:表示这是一个常规文件,文件权限为 644
# 通过 一下命令 可以看 指定 文件对象 的 当时状态 的 文件具体内容。
git cat-file -p 61ea990
  • 第三行:
    --- a/name.txt表示修改前的文件; +++ b/name.txt表示修改后的文件
  • 第四行:
    @@ -1,4 +1,4 @@ : 修改区域,开头和结尾的 @@ 为固定格式。
    -1,4 表示 这个 修改区域 的 范围 在 修改前的文件的 1~4行,
    +1,4 表示 这个 修改区域 的 范围 在 修改完成之后 的文件的 1~4行。
    举例说明: @@ -0,0 +0,3 @@ 说明 修改之前文件为空, 修改的具体操作 是 加了 3行代码。
    下面是 具体的改动 信息,新增内容前面是加号 +,删除内容前面是减号 -:
tom  
-alice  
+jerry  
bily  
andy
  • 第五行: \ No newline at end of file
    这个 文件 的改动信息 结束, 进入 下一个 文件的改动信息 查看区。



^_^ pull 和 fetch 区别

在这里插入图片描述

# git pull 相当于 以下两个步骤的 集合
git fetch origin master // 从远程主机的master分支拉取最新内容 

git merge FETCH_HEAD    // 将拉取下来的最新内容合并到当前所在的分支



^_^ 分支管理

1. 基本管理

# 查看本地分支 
git branch

# 查看远程分支 
git branch -r

# 查看本地和远程分支 
git branch -a
#  创建wtt分支(内容上,当前分支的内容复制一份给创建的分支)
git branch wtt   

# 将本地创建的 分支 同步到 远程
git push --set-upstream origin wtt
# 删除本地分支
git branch -d wtt  # 会在删除前检查merge状态(其与上游分支或者与head)
git branch -D wtt  # 是 git branch --delete --force的简写,它会直接删除。

# 删除远程分支
git push origin --delete wtt
  • 合并
git merge dev		#  合并dev分支到 当前分支
  • 切换
git checkout dev   # 或 git switch dev  切换分支

2. 在本地新建的aaa分支 并和 远程的bbb 建立连接

git checkout -b aaa origin/bbb

3. 默认分支

git clone 的时候 默认拉取 的是 默认分支 代码

git clone git@gitee.com:Auth/ProjectName.git

如果拉取指定分支的代码,例如 abc分支 的代码,则如此操作:

git clone  -b abc git@gitee.com:Auth/ProjectName.git



^_^ 变动保存

1、基本使用:

git stash

说明:

  • 默认情况下,会把 以下修改 存储到一个 stash栈中:

1、暂存区中的修改
2、工作区中已经存在的文件的修改

  • 默认情况下,不会存储下列文件:

1、工作区中新增的文件(untracked files)
2、被版本库忽略的文件(.gitignore 中定义的)

  • 如果非要存储 新增的文件,可以: git stash -u
  • 如果非要存储 新增的文件 和 被版本库忽略的文件 可以使 git stash -a

执行 git stash 命令后,具体表现为:

暂存区 中的修改看不见了,工作区 中已经存在的文件的修改也看不见了。

注意: stash栈中的内容可以被所有git分支访问

2、stash备注

git stash save "备注信息"

因为可以多次 向 堆栈中 stash 数据,所以如果你想要在 git stash 时,想像 commit -m “***” 一样添加一个 信息注解,可以使用 save 选项.

3、查看stash

git stash list   		# 查看全部的stash
git stash show     #  查看最近一次git stash 的 保存的 大概 内容
git stash show -p   #  查看最近一次git stash 的 保存的 详细 内容
git stash show stash@{id} # 产看指定 哪一次git stash 的 保存的大概内容

stash 每次添加的代码都会到一个独立空间,多个 stash,通过 stash_id 进行区分

4、将堆栈中的stash 代码 返回到 工作区(不是暂存区)

复制 到工作区:
git stash apply   # 将堆栈中的最近一次 stash,放到工作区(保留堆栈的内容)
git stash apply stash@{id} # 将堆栈中的指定 stash 放到工作区(保留堆栈的内容)
剪切 到工作区:
git stash pop  # 将堆栈中的最近一次 stash,放到工作区(删除堆栈的内容)
git stash pop stash@{id}   # 将堆栈中的指定 stash 放到工作区(删除堆栈的内容)
删除堆栈中的stash
git stash drop    #  删除最近一次的stash
git stash drop stash@{id}  #  删除指定的一次 stash
git stash clear   # 删除所有的 stash

摘要: save、list、show、apply、pop、drop



^_^ 配置ssh

方便push 和 clone代码

  • step1
    git config --global user.name “WHO”
    git config --global user.email “888888@126.com”
  • step2
    cd ~; ls =》查看家目录下是否有.ssh目录,
    如果没有下面命令会自动生成一个
    ssh-keygen -t rsa -C “888888@126.com” # 一路按回车


    说明: 这个.ssh目录不只属于git ,而是 用户密钥 的存储目录。
  • step3
    进入.ssh目录你会看到两个文件id_rsa和id_rsa.pub,
    d_rsa是私钥,id_rsa.pub自然就是公钥啦,
    然后我们需要做的就是把id_rsa.pub文件中的内容拷贝一下 。
  • step4
    进入你自己的github,进入Settings->SSH and GPG keys->New SSH key,
    然后在Key那栏下面将第四步拷贝的东西粘贴进去就可以了,最后点击 Add SSH key按钮添加。
    (如果之前有配置过的公匙,先删掉,再将新的复制进去)

修改git的提交方式: https —> ssh

配置完ssh,就可以把原有项目的提交方法 由 https 改为 ssh

  • 查看当前项目采用的提交方式:git remote -v
    如果是 https:// 就是采用的是https方式;
    如果是 git@ 就是采用的是 ssh 的方式。
  • 删除原有的https方式(也就是原有的源):git remote rm origin
  • 查看原有的源是否删除成功: git remote
  • 以ssh的方式添加一个源: git remote add origin ssh链接
  • 此时可以再次查看 采用的提交方式。
  • 注意 切换了源,不能简单的用 git push 提交,而是要用:
    git push --set-upstream origin master



本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到