git笔记(本地操作教程)

git笔记(本地操作教程)
git笔记(团队协作教程,GitHub操作)
git笔记(IDEA 集成 Git)
git笔记(IDEA 集成 GitHub)
自建代码托管平台-GitLab

官网地址: https://git-scm.com/
Git高速下载地址:https://npm.taobao.org/mirrors/git-for-windows/

安装:

在这里插入图片描述
选择 Git 安装位置,要求是非中文并且没有空格的目录,然后下一步。
在这里插入图片描述
Git 选项配置,推荐默认设置,然后下一步。
在这里插入图片描述
Git 安装目录名,不用修改,直接点击下一步。
在这里插入图片描述
Git 的默认编辑器,建议使用默认的 Vim 编辑器,然后点击下一步。
在这里插入图片描述
默认分支名设置,选择让 Git 决定,分支名默认为 master,下一步。
在这里插入图片描述
修改 Git 的环境变量,选第一个,不修改环境变量,只在 Git Bash 里使用 Git。
在这里插入图片描述
选择后台客户端连接协议,选默认值 OpenSSL,然后下一步。
在这里插入图片描述
配置 Git 文件的行末换行符,Windows 使用 CRLF,Linux 使用 LF,选择第一个自动转换,然后继续下一步。
在这里插入图片描述
选择 Git 终端类型,选择默认的 Git Bash 终端,然后继续下一步。
在这里插入图片描述
选择 Git pull 合并的模式,选择默认,然后下一步。
在这里插入图片描述
选择 Git 的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步。
在这里插入图片描述
其他配置,选择默认设置,然后下一步。
在这里插入图片描述
实验室功能,技术还不成熟,有已知的 bug,不要勾选,然后点击右下角的 Install按钮,开始安装 Git。
在这里插入图片描述
点击 Finsh 按钮,Git 安装成功!
在这里插入图片描述
右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端。
在这里插入图片描述
在 Git Bash 终端里输入 git --version 查看 git 版本,如图所示,说明 Git 安装成功。
在这里插入图片描述

Git 常用命令

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m “日志信息” 文件名提交到本地库
git reflog查看历史记录
git reset --hard 版本号版本穿梭

设置用户签名

命令:
git config --global user.name 用户名
git config --global user.email 邮箱

全局范围的签名设置:

Windows查看可在c盘-用户-当前登录用户-.gitconfig文件中查看

实操演示(带$符号的那行才是我们敲的命令):

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git config --global user.name Layne
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git config --global user.email Layne@163.com
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ cat ~/.gitconfig
[user]
	name = Layne
	email = Layne@163.com

说明:
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看
到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。

※注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任
何关系。

初始化本地库

基本语法:
git init
案例实操:

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720
$ git init
Initialized empty Git repository in D:/Git-Space/SH0720/.git/
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ ll -a          //ll是查看目录下文件,加-a是查看隐藏文件,命令与Linux通用
total 4
drwxr-xr-x 1 Layne 197609 0 1125 14:07 ./
drwxr-xr-x 1 Layne 197609 0 1125 14:07 ../
drwxr-xr-x 1 Layne 197609 0 1125 14:07 .git/ (.git 初始化的效果,生成 git)

结果查看:
在这里插入图片描述

查看本地库状态

基本语法:

git status

案例实操:

首次查看(工作区没有任何文件)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master   //当前本地库在master分支上,安装的时候让git决定默认分支,git默认分支就是master
No commits yet    //当前没有提交过任何东西
nothing to commit (create/copy files and use "git add" to track)  //当前没有东西需要提交
新增文件(hello.txt)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ vim hello.txt     //编辑文件命令
hello     //vim里面yy是复制(复制一整行),p是粘贴

esc,:wq保存

再次查看(检测到未追踪的文件)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master   //当前本地库在master分支上,安装的时候让git决定默认分支,git默认分支就是master

No commits yet   //当前没有提交过任何东西

Untracked files:   //发现了一个未被追踪的文件hello.txt
	(use "git add <file>..." to include in what will be committed)
	
		hello.txt
//你现在没有添加过任何东西,但是呢我确实已经有一个未被追踪的文件了,你需要用use "git add"to track命令把它添加一下
nothing added to commit but untracked files present (use "git add"to track)

添加暂存区

将工作区的文件添加到暂存区

基本语法
git add 文件名
案例实操:

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.   //警告:git自动帮你转换了行末换行符(不用管)
The file will have its original line endings in your working
directory.
查看状态(检测到暂存区有新文件)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
//没提交过
No commits yet

Changes to be committed:
	//git的提示:用  git rm --cached <file>  命令可以把暂存区这个文件在暂存区删除
	(use "git rm --cached <file>..." to unstage)

		new file: hello.txt     //从红色变成绿色了,表示当前git已经追踪到了这个文件(在暂存区)

从暂存区删除命令(工作区不受影响,还在):

git rm --cached hello.txt

提交本地库

将暂存区的文件提交到本地库

基本语法
git commit -m “日志信息” 文件名
案例实操

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git commit -m "my first commit" hello.txt
warning: LF will be replaced by CRLF in hello.txt. //转换了行末换行符
The file will have its original line endings in your working
directory.
[master (root-commit) 86366fa] my first commit  //master 主干分支有一个第一次提交的版本,86366fa这个是版本码
	1 file changed, 16 insertions(+)   //有一个文件,16行改变
	create mode 100644 hello.txt
查看状态(没有文件需要提交)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master  //你当前是主干分支
//没有东西需要再提交,无事可做,工作树干干净净
nothing to commit, working tree clean
查看版本信息
//精简日志
$ git reflog
//版本号前七位,当前指针指向master分支
c2c29e9 (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: commit: 
//完整日志
//完整版本号
commit c2c29e91e34830e2cc4222e3e4e39492ec84adb6 (HEAD -> master, origin/master, origin/HEAD)

$ git log

修改文件(hello.txt)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ vim hello.txt
hello git! = 2222222222222
查看状态(检测到工作区有文件被修改)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
Changes not staged for commit:
	(use "git add <file>..." to update what will be committed)
	(use "git checkout -- <file>..." to discard changes in working
directory)
		modified: hello.txt  //被修改的文件,且是红色的,说明还没添加到暂存区
no changes added to commit (use "git add" and/or "git commit -a")
将修改的文件再次添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working
directory.
查看状态(工作区的修改添加到了暂存区)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
Changes to be committed:
	(use "git reset HEAD <file>..." to unstage)
		modified: hello.txt  //又变绿了,添加到了暂存区
再次提交

日志信息提示,1个文件被修改,1行新增,1行删除。
git里是按行来维护文件的,修改了一行,它没办法表达出来,只能把修改之前的那行删掉,再把修改之后的那行新增进来
在这里插入图片描述

历史版本

查看历史版本

基本语法
git reflog 查看版本信息
git log 查看版本详细信息

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog
//版本号,末尾的是提交时候的注释信息
087a1a7 (HEAD -> master) HEAD@{0}: commit: my third commit
ca8ded6 HEAD@{1}: commit: my second commit
86366fa HEAD@{2}: commit (initial): my first commit

$ git log
commit c2c29e91e34830e2cc4222e3e4e39492ec84adb6 (HEAD -> master, origin/master, origin/HEAD)
//作者,谁提交的
Author: ygjin <11041697@qq.com>
//提交日期
Date:   Thu Mar 3 19:31:39 2022 +0800

    改写接口

    Signed-off-by: ygjin <11041697@qq.com>

版本穿梭

基本语法
git reset --hard 版本号


//  首先查看当前的历史记录,可以看到当前是在 087a1a7 这个版本
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog
087a1a7 (HEAD -> master) HEAD@{0}: commit: my third commit 
ca8ded6 HEAD@{1}: commit: my second commit
86366fa HEAD@{2}: commit (initial): my first commit

//切换到 86366fa 版本,也就是我们第一次提交的版本
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reset --hard 86366fa
HEAD is now at 86366fa my first commit

//切换完毕之后再查看历史记录,当前成功切换到了 86366fa 版本
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog
//下面这行是操作日志,指针穿越到了86366fa的版本
86366fa (HEAD -> master) HEAD@{0}: reset: moving to 86366fa
087a1a7 HEAD@{1}: commit: my third commit
ca8ded6 HEAD@{2}: commit: my second commit
86366fa (HEAD -> master) HEAD@{3}: commit (initial): my first commit

// 然后查看文件 hello.txt,发现文件内容已经变化
$ cat hello.txt
hello git! hello 

.git/ 目录中,有个HEAD文件,里面记录了当前在哪个分支上
在这里插入图片描述
在master分支上
在这里插入图片描述

.git\refs\heads\master 中记录的在这个分支的哪个版本号上
在这里插入图片描述
在这里插入图片描述

head 指向分支,分支指向版本。穿梭版本就是master指针切换,head指针并没动
在这里插入图片描述

分支

什么是分支

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)

在这里插入图片描述

分支的好处

同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

分支的操作

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

查看分支

基本语法
git branch -v

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch -v
* master 087a1a7 my third commit (*代表当前所在的分区)

创建分支

基本语法
git branch 分支名

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch hot-fix
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch -v
	hot-fix 087a1a7 my third commit (刚创建的新的分支,并将主分支 master
的内容复制了一份)
* master 087a1a7 my third commit

修改分支

--在 maste 分支上做修改
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ vim hello.txt
--添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt
--提交本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git commit -m "my forth commit" hello.txt
[master f363b4c] my forth commit
1 file changed, 1 insertion(+), 1 deletion(-)
--查看分支
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch -v
hot-fix 087a1a7 my third commit (hot-fix 分支并未做任何改变)
* master f363b4c my forth commit (当前 master 分支已更新为最新一次提交
的版本)
--查看 master 分支上的文件内容
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ cat hello.txt
hello git! hello  2222222222222
hello git! hello  3333333333333
hello git! hello  master test
hello git! hello 

切换分支

基本语法
git checkout 分支名

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git checkout hot-fix
Switched to branch 'hot-fix'
--发现当先分支已由 master 改为 hot-fix
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$
--查看 hot-fix 分支上的文件内容发现与 master 分支上的内容不同
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ cat hello.txt
hello git! hello ! 2222222222222
hello git! hello ! 3333333333333
--在 hot-fix 分支上做修改
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ cat hello.txt
hello git! hello ! 2222222222222
hello git! hello ! 3333333333333
hello git! hello !
hello git! hello ! hot-fix test
--添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ git add hello.txt
--提交本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ git commit -m "hot-fix commit" hello.txt

合并分支

基本语法
git merge 分支名
案例实操 在 master 分支上合并 hot-fix 分支

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git merge hot-fix
//自动合并
Auto-merging hello.txt
//CONFLICT 冲突 Merge conflict  合并冲突, 在 hello.txt里面
CONFLICT (content): Merge conflict in hello.txt
//Automatic merge failed自动合并失败fix conflicts and then commit the result.修复冲突后再提交结果
Automatic merge failed; fix conflicts and then commit the result.

产生冲突

冲突产生的表现:后面状态为 MERGING(正在合并中)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
$ cat hello.txt
hello git! hello ! 2222222222222
hello git! hello ! 3333333333333
hello git! hello !
hello git! hello !
<<<<<<< HEAD
hello git! hello ! master test
hello git! hello !
=======
hello git! hello !
hello git! hello ! hot-fix test
>>>>>>> hot-fix

冲突产生的原因:
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。

查看状态(检测到有文件有两处修改)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
$ git status
On branch master
You have unmerged paths.
	(fix conflicts and run "git commit")
	(use "git merge --abort" to abort the merge)
Unmerged paths:
	(use "git add <file>..." to mark resolution)
	//both modified 两个分支都对它做了修改
		both modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")

解决冲突

编辑有冲突的文件,删除特殊符号,决定要使用的内容
特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix

hello git! hello ! 2222222222222
hello git! hello ! 3333333333333
hello git! hello !
hello git! hello ! master test
hello git! hello ! hot-fix test

把两部分代码合并完后,切记添加到暂存区

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
$ git add hello.txt

执行提交(注意:此时使用 git commit 命令时不能带文件名

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
//引号内的是合并说明,按情况描写(可以"")
$ git commit -m "merge hot-fix"
[master 69ff88d] merge hot-fix
--发现后面 MERGING 消失,变为正常
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)

合并只会修改当前的分支,不会修改合并过来的那个分支

创建分支和切换分支图解

从master的third版本中,创建了一个hot-fix分支
在这里插入图片描述
分支切换就是head指向了hot-fix,然后hot-fix分支又修改,更新了一个版本。
在这里插入图片描述
git底层就是玩的2个指针,一个head指针,指向哪个分支,一个分支指针指向哪个版本

在这里插入图片描述
在这里插入图片描述

master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD决定的。所以创建分支的本质就是多创建一个指针。
HEAD 如果指向 master,那么我们现在就在 master 分支上。
HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。
所以切换分支的本质就是移动 HEAD 指针。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值