尚硅谷Git学习笔记

Git是一个免费的、开源的分布式版本控制系统,可以快速有效地处理从小型到大型的项目。

  1. Git介绍:分布式版本控制 vs 集中式版本控制
  2. Git安装:基于官网版本2.31.1
  3. Git命令:基于开发案例常用Git命令
  4. Git分支:分支特性 分支建立 分支转换 分支合并 代码合并冲突
  • GitHub:创建远程库,代码推送Push,代码拉取Pull,代码克隆Clone,SSH免密登录,Idea集成GitHub
  • Gitee码云:码云创建远程连接,码云连接github进行代码复制和迁移
  • GitLab:GitLab服务器的搭建和部署,Idea集成GitHub

第一章 Git概述

Git易于学习,体积小,性能高,具有廉价的本地库,方便暂存区域和多个工作流分支等特性。

何为版本控制:记录文件内容的变化以便将来查阅特定版本修订情况。

集中式:单一的集中管理的服务器。问题:单点故障问题。

分布式:服务器在断网情况下也可以进行开发,每个客户端保存的也都是整个完整的项目。

发展史:Linus

工作区:存放代码的路径位置,写代码-- git add --暂存区:临时存储-- git commit -- 本地库,历史版本(删不掉)--git push--远程库

代码托管中心(远程库):①局域网:GitLab。②:互联网:GitHub、Gitee

第二章 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 版本号 版本穿梭

设置用户名和邮箱之后可以在Windows用户目录下找到一个.gitconfig文件的设置结果。这里设置的用户签名和将来登录GitHub或其他代码托管中心的账号没有任何关系。

  • 初始化本地库git init会在当前文件夹下生成.git配置文件。
  • 查看状态:git status
$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

当前文件夹下生成一个hello.txt文件之后

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hello.txt

nothing added to commit but untracked files present (use "git add" to track)
  • 添加到暂存区
$ 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

再次查看状态

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   hello.txt

删除掉暂存区的文件,但是不会删除本地工作区的文件

$ git rm --cached hello.txt
rm 'hello.txt'

再次查看状态

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hello.txt

nothing added to commit but untracked files present (use "git add" to track)
  • 提交本地库 基本语法:git conmmit -m "日志信息" 文件名
$ git commit -m "the 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) d030090] the first commit
 1 file changed, 1 insertion(+)
 create mode 100644 hello.txt

查看一下提交后的状态

$ git status
On branch master
nothing to commit, working tree clean

查看版本信息

$ git reflog
d030090 (HEAD -> master) HEAD@{0}: commit (initial): the first commit

上面的d030090就是版本号,HEAD指针指向master版本,指向的是当前版本。 或者查看详细日志

$ git log
commit d030090a846d9a7c13b105de6ff459edc1720f29 (HEAD -> master)
Author: zhouda <zhouda1998@qq.com>
Date:   Thu Apr 7 22:05:02 2022 +0800

    the first commit

对本地工作区的文件进行修改,vim hello.txt修改(添加了一行文件)之后再次查看状态: 会看到红色提示:已经修改并且还没有提交。

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   hello.txt

no changes added to commit (use "git add" and/or "git commit -a")

再次添加到暂存区并且查看状态

$ 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

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   hello.txt

再次提交并且查看状态,并查看版本信息

# 提交
$ git commit -m "the second 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 0a565f4] the second commit
 1 file changed, 2 insertions(+), 1 deletion(-)
# 查看状态
$ git status
On branch master
nothing to commit, working tree clean
# 查看版本
$ git reflog
0a565f4 (HEAD -> master) HEAD@{0}: commit: the second commit
d030090 HEAD@{1}: commit (initial): the first commit
  • 历史版本:基本语法git reflog或者详细信息git
  • 版本穿越 查看到版本号之后版本穿越
# 查看版本号
$ git reflog
0a565f4 (HEAD -> master) HEAD@{0}: commit: the second commit
d030090 HEAD@{1}: commit (initial): the first commit
# 穿越
$ git reset --hard 0a565f4
HEAD is now at 0a565f4 the second commit
# 查看
$ git reflog
0a565f4 (HEAD -> master) HEAD@{0}: reset: moving to 0a565f4
0a565f4 (HEAD -> master) HEAD@{1}: commit: the second commit
d030090 HEAD@{2}: commit (initial): the first commit
# 此时再次查看该文件就是穿越版本之后的文件
cat hello.txt

从本地工作目录中可以看到在路径.git\refs\heads\下的master文件内容就是当前文件的提交版本号。Git版本切换底层就是移动HEAD指针。

第四章:Git分支操作

什么是分支:为同时推进多个任务,为每个任务可以单独创建一个分支,分离出来的分支不会影响主分支。分支可以理解为副本,一个分支就是一个单独的副本,分支的底层是指针的引用。

分支命令

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

当开了另外一个hot-fix分支,在hot-fix分支上进行了修改并提交,但是在master分支上没有做修改,当处于master分支的时候合并hot-fix分支就会直接覆盖当前master分支。

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

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (master)
$ cat hello.txt
this is a demo

1
2
3
4
5
6
7
8       master change
9

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (master)
$ vim hello.txt

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (master)
$ git add hello.txt

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (master)
$ git commit -m "master change2" hello.txt
[master 42960c2] master change2
 1 file changed, 1 insertion(+), 1 deletion(-)

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (master)
$ git checkout hot-fix
Switched to branch 'hot-fix'

这里会出现问题,两个分支都进行了更改

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (hot-fix)
$ git merge master
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.

分支上不同的内容会被标记出来,HEAD=之间的内容表示当前的分支的内容,=>之间是要合并分支的内容,必须手动的删掉多余的信息,只保留一份。例如只保留:8 master change hot-fix change9 hot-fix change,其余从第七行多余的符号全部删掉。

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (hot-fix|MERGING)
$ cat hello.txt
this is a demo

1
2
3
4
5
6
7
<<<<<<< HEAD
8       master change hot-fix change
9
=======
8       master change
9       hot-fix change
>>>>>>> master

手动修改后:

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (hot-fix|MERGING)
$ vim hello.txt

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (hot-fix|MERGING)
$ cat hello.txt
this is a demo

1
2
3
4
5
6
7
8       master change hot-fix change
9       hot-fix change

手动修改之后仍然需要add和commit,只是:commit不需要再加上文件名,否则会报错

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (hot-fix|MERGING)
$ git add hello.txt

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (hot-fix|MERGING)
$ git commit -m "合并冲突之后commit不能再加文件名"
[hot-fix b200cfd] 合并冲突之后commit不能再加文件名

该操作的底层也是对文件的指针操作。head指针指向分支,master指向版本。

第五章:Git团队协作机制

  1. 团队内协作 如有成员A和成员B: A的本地库---push---远程库---clone---B的本地库更改后---push---远程库---pull---A的本地库
  2. 团队外协作 如有团队A和B:

A的远程库代码a---fork---B的远程库a---clone---B的本地库修改a'---push---B的远程库a'---pull request ---经A审核之后---merge---A的远程库a'

第六章:GitHub操作

在github创建远程库 alt alt

  • 创建远程库别名 链接太长了取一个别名代替

git remote -v 查看当前所有远程地址别名 git romote add 别名 远程地址起一个别名代替远程地址

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (hot-fix)
$ git remote add git-demo https://github.com/zhouda98/git-demo.git

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (hot-fix)
$ git remote -v
git-demo        https://github.com/zhouda98/git-demo.git (fetch)
git-demo        https://github.com/zhouda98/git-demo.git (push)
  • 推送本地代码到远程库 git push 别名/链接 分支名

然后再输入账号即可。github上刷新页面就能看到上传的代码。

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (master)
$ ll
total 1
-rw-r--r-- 1 zhouda 197121 74 Apr 11 16:24 hello.txt

zhouda@LAPTOP-IEFFHFDS MINGW64 /f/Git/Git-demo2 (master)
$ git push git-demo master
fatal: unable to access 'https://github.com/zhouda98/git-demo.git/': OpenSSL SSL_read: Connection was reset, errno 10054

也可以直接在网站上做出修改然后提交 alt alt

  • 拉取远程库到本地 git pull 链接/别名 分支

拉取之后就是最新同步的代码

  • 克隆远程仓库到本地 git clone 远程地址

克隆代码不需要登陆账号(公共库具有读权限)

  1. 拉取代码
  2. 初始化本地git环境
  3. 创建别名git remote -v
  • 邀请加入团队
  1. 选择合作者 更改之后:git status,添加暂存区git add hello.txt,提交本地库git commit -m "lhc commit" hello.txt,push到远程库:git push 远程库链接。登录提交可能没有权限,需要库主设置。

库主账号目录下,settings,manage access, invite a collaborator,添加用户名,复制邀请函pending invite发送给被邀请人

被邀请人:拿到邀请链接之后接受。重新从本地进行推送git push 远程连接

库主进行拉取git pull git-demo master

  • 跨团队协作 精确搜索:username/库名 团队外成员 fork
  1. 直接在网页修改并提交,只是提交到自己当下的账号下。
  2. 团队外成员页面拉取请求:pull requests,new pull request,creater pull request,填写提交的信息create pull request。
  3. 团队内成员刷新就会有pull request请求,点击链接即可。
  4. 团队内成员检查代码之后可以merge完成修改,成为最新的代码。
  • SSH免密登录 HTTPS链接,还可以用SSH链接
  1. win家目录,用户目录下,右键git bash here
  2. 生成.ssh文件夹:ssh-keygen -t rsa -C 账号邮箱
  3. 敲三次回车会产生一个.ssh文件夹里面有公钥.pub和私钥
  4. 将公钥内容复制粘贴到settings ssh and GPG keys
  5. new ssh key 写上title名,粘贴.pub的内容 alt

测试:

  1. 打开git命令行
  2. 网页端复制ssh链接
  3. git命令行:git pull ssh链接 master
  4. 保存链接
  5. vim hello.txt
  6. git add hello.txt
  7. git commit -m "yyy commit" hello.txt
  8. git push ssh链接 master

第七章集成git到ide

忽略文件: 创建一个xxx.ignore文件

*.class
*.log
  • 用户家目录下:新建文本文档:git.ignore
  • 粘贴要忽略的规则
  • 在gitconfig文件中引用忽略配置文件
[user]
	name = zhouda1998
    email = zhouda1998@qq.com
[core]
	excludesfile = "C/user/zhouda/git.ignore"
  • 该目录需要的是斜线而不是win的反斜线

定位git程序

第九章码云

全部评论

相关推荐

11-15 17:19
湖南大学 Java
成果成果成果果:这是哪个公司的hr,这么离谱吗,我没见过用性别卡技术岗的,身边女性同学拿大厂offer的比比皆是
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务