【Git】Git使用(保姆级讲解) 您所在的位置:网站首页 git的操作命令 【Git】Git使用(保姆级讲解)

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

#【Git】Git使用(保姆级讲解)| 来源: 网络整理| 查看: 265

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'

生效

​ 在 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 add 和 git 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 # 输入账号密码后下次就不用输入了


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有