【Git】Git使用(保姆级讲解)

1、第一次安装使用

git下载地址:https://git-scm.com/download

1.1 配置用户名、邮箱

​ 这是非常重要的,因为每次Git提交都会使用该用户信息。

设置

​ 在 git bash 输入以下命令。

git config --global user.name ""
git config --global user.email ""

查看信息

git config --global user.name
git config --global user.email

1.2 为常用指令配置别名(可选)

​ 可以简化每次输入过长的命令。

在用户目录中创建 .bashrc 文件

​ windows 系统下的用户目录位置:C:\Users\用户名

touch ~/.bashrc

使用 alias 命令:给命令取别名

​ 可以在 git bash 使用 vi/vim 编辑器编辑,也可以直接在本地打开编辑。

#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息,ll命令本身等同于 ls -l
alias ll='ls -al'
#git存储到本地仓库
alias git-local='func(){ git add .; git commit -m $1; };func'

生效

​ 在 windows 系统的家目录中创建的 .bashrc 不像 linux 系统那样,修改后不需要执行 source 命令进行生效,在 windows 系统下需要执行该命令

source ~/.bashrc

遇到的问题

​ 如果 ~/.bashrc 是第一次创建的话,重新打开 git bash 可能会显示下面的信息,不用理会,它只是在家目录新生成了一个 ~/.bash_porfile 文件。

2、新建本地仓库

在本地选择/创建一个空目录作为本地 Git 仓库

在 git bash 输入

git init

如果创建成功后可在文件夹下看到隐藏的 .git 目录。

3、基础操作指令

​ Git 工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行 Git 的命令而发生变化。

​ 使用如下命令可以让文件在这三个状态间切换:

  • git add (工作区 --> 暂存区)
  • git commit (暂存区 --> 本地仓库)

3.1 查看修改的状态(status)

​ 作用:查看的修改的状态(暂存区、工作区)

git status

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

3.2 添加工作区到暂存区(add)

​ 作用:添加工作区一个或多个文件的修改到暂存区

git add 单个文件名|通配符

3.3 提交暂存区到本地仓库(commit)

​ 作用:提交暂存区内容到本地仓库的当前分支

git commit -m "注释内容"

3.4 查看提交日志(log)

​ 作用:查看提交记录

git log [option]

options

  • –all:显示所有分支
  • –pretty=oneline:将提交信息显示为一行
  • –abbrev-commit:使得输出的 commitId 更简短
  • –graph:以图的形式显示

​ 最好的查看效果就是将所有的选项全部选上,也就是前面给命令取别名的 git-log,即:

git log --pretty=oneline --all --graph --abbrev-commit

3.5 版本回退

​ 作用:版本切换

# commitID 可以使用 git-log 或 git log 指令查看
git reset --hard commitID
# 查看已经删除的提交记录
git reflog

3.6 添加文件至忽略列表(.gitignore文件)

​ 作用:把指定的文件无需纳入 Git 的管理中,也就是在执行 git addgit commit 都不会将这些文件放入到暂存区和仓库之中。

在工作目录中创建 .gitignore 文件

列出要忽略的文件模式

# 忽略所有以 .a 结尾的文件
*.a
# 一定要管理 lib.a 文件,即使上面忽略所有以 .a 结尾的文件
!lib.a
# 忽略当前目录下的 TODO 文件,子目录下的 TODO 文件照常管理
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 忽略 doc/ 目录下所有以 .txt 结尾的文件,但子目录下的 .txt 文件照常管理
doc/*.txt
# 忽略 doc/ 目录下的所有 .pdf 文件(包括子目录)
doc/**/*.pdf

3.7 可能遇到的问题

(1)将工作区保存到暂存区(add 命令):

链接

warning: LF will be replaced by CRLF in xxx.
The file will have its original line endings in your working directory

原因:文件中换行符的差别导致的。这个提示的意思是说:会把windows格式(CRLF(也就是回车换行))转换成Unix格式(LF),这些是转换文件格式的警告,不影响使用。git默认支持LF。windows commit 代码时 git 会把 CRLF 转 LF,update 代码时 LF 换 CRLF。

解决方法

git rm -r --cached .
git config core.autocrlf false
git add .
git commit -m ""

4、分支管理

​ 分支作用:可以把的工作从开发主线上分离开来进行重大的 Bug 修改、开发新的功能,以免影响开发主线。

4.1 查看本地分支

git branch

4.2 创建本地分支

git branch 分支名

4.3 切换分支(checkout)

git checkout 分支名
# 接切换到一个不存在的分支(创建并切换)
git checkout -b 分支名

4.4 合并分支(merge)

​ 一个分支上的提交可以合并到另一个分支

git merge 分支名称

4.5 删除分支(branch -d/D)

不能删除当前分支,只能删除其他分支

# 删除分支时,需要做各种检查
git branch -d b1
# 不做任何检查,强制删除
git branch -D b1

4.6 合并冲突

发生冲突的原因一般是两个分支对同一文件做出了不同的修改,Git 无法判断要如何进行修改,于是就将判断权交给用户,让用户进行修改。

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

4.7 使用示例

(1)在 master 分支创建了 aaa.txt 空文件,并执行 add 和 commit 命令将其保存到本地仓库中,并将该操作备注为 “创建 aaa.txt 文件”。

在这里插入图片描述

(2)新创建一个 child_1 子分支,该子分支的进度与 master 分支一致。

在这里插入图片描述

(3)在 child_1 子分支中修改 aaa.txt 内容,并保存到本地仓库中,并将该操作备注为 “修改 aaa.txt 文件”。可以看到 master 分支的进度还处于创建 aaa.txt 文件阶段,而在 child_1 分支中则多了个修改 aaa.txt 文件的操作。

(4)提交后转回到 master 分支,证实了(3)所说的,在 child_1 子分支上提交的修改后的 aaa.txt 文件在 master 分支上并未存在,还是处于空白状态

(5)在 master 分支再次创建一个 child_2 子分支,发现 child_2 分支也继承了 master 分支的进度。

(6)在 child_2 子分支在创建一个 bbb.txt 文件,并进行修改,分别各自执行 add 和 commit 命令将其保存到本地仓库中。

(7)再次返回到 master 分支,创建并修改一个 ccc.txt 文件,保存到本地仓库中。

(8)将 child_1 子分支和 child_2 子分支分别合并到 master 分支当中去。

(9)对比(7)、(8)的三幅图,可以得知最重要的几个结论:

  • 红色线:master 主分支没有实现的步骤。
  • 绿色线:master 主分支已经实现的步骤。
  • * 号:该分支所实现的步骤。
  • 缩进:master 主分支没有缩进,子分支在父分支的基础上进行一个缩进(以 * 号为标准)。

5、远程仓库

5.1 添加远程仓库(remote add)

​ 操作之前要先在 github/gitee 创建一个新的仓库。

git remote add <远端名称> <仓库路径>
  • 远端名称:默认是 origin,取决于远端服务器设置。
  • 仓库路径:从远端服务器获取此 URL。

5.2 配置SSH公钥

# 生成 ssh 公钥,不断回车即可(如果之前生成过的视情况是否需要覆盖原来的公钥)
ssh-keygen -t rsa
# 获取公钥
cat ~/.ssh/id_rsa.pub

Gitee 设置账户公钥

验证是否配置成功

ssh -T [email protected]

5.3 查看远程仓库(remote)

git remote

5.4 推送到远程仓库(push)

注:在推送之前要将文件保存到本地仓库中。

git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名] ]
# 如果远程分支名和本地分支名称相同,则可以只写本地分支
git push origin master
# 该语句的意思是将本地仓库的 master 分支推送到远程仓库的 master 分支,该语句等同于上面那条语句
git push origin master:master
  • -f:表示强制覆盖。
  • –set-upstream:推送到远端的同时并且建立起和远端分支的关联关系,此时就可以使用 git push 命令直接进行推送了,无需指定分支名。
# 查看本地分支与远程分支的关联关系
git branch -vv

5.5 从远程仓库克隆(clone)

git clone <仓库路径> [本地目录]
  • 本地目录可以省略,会自动生成一个目录

5.6 从远程仓库中抓取(fetch)

git fetch [remote name] [branch name]
git merge 分支名称
  • 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
  • 如果不指定远端名称和分支名,则抓取所有分支。

5.7 从远程仓库中拉取(pull)

git pull [remote name] [branch name]
  • 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于 fetch + merge
  • 如果不指定远端名称和分支名,则抓取所有并更新当前分支。

5.8 推送/拉取冲突

​ 在多人协作时,很可能会遇到如下问题:

  • 在将 A 文件推送(push)到远程仓库时发现有人已经对 A 文件进行了修改,并且修改的内容与你本地的 A 文件不一致,推送被阻止。

  • 你修改 A 文件很长时间了,还没有修改完,但是想看其他人是否有对该文件进行了其他的修改,于是执行了拉取(pull),发现确实是有人对其了修改,拉取被阻止。

​ 那要如何得知其他人所做的修改呢?也就是如何解决该冲突呢?

​ 在前面的命令可以得知,如果在合并分支的时候发现相同文件不一致,会在该文件中标注出来冲突的位置,让用户自行选择需要保留哪个内容。这里也是如此,要使用抓取(fetch) + 合并分支(merge)命令解决该问题

5.9 可能遇到的问题

(1)推送/抓取时的报错:

链接

原因:本地仓库与远程仓库的内容不一致导致的(远程仓库有一些内容本地没有,或者是相同文件的不同内容)。

解决办法
如果想要强行提交

git push -f origin master

如果想要强行拉取

git pull origin master --allow-unrelated-histories

(2)每次推送到远程仓库需要输入账户密码:

链接

git: 'credential-manager' is not a git command. See 'git --help'.

解决办法

git config --global credential.helper store
# 再次进行推送
git push origin master
# 输入账号密码后下次就不用输入了

猜你喜欢

转载自blog.csdn.net/weixin_48896613/article/details/129218519
今日推荐