Git常见操作指令之保姆级教程,新手可入坑

目录

1、安装与简介

1.1 安装

1.2 简介

2、本地仓库

2.1 设置用户信息

2.2 创建本地仓库 

2.3 查看分支

2.4 查看仓库状态 

2.5 添加暂存区 

2.6 提交本地仓库 

2.7 创建和切换分支

2.8 删除分支

2.9 合并分支

2.9.1 无冲突合并

2.9.2 冲突合并

2.9.3 特殊情况

2.9.4 常规选择

2.9.5 Vim退出操作

 3、远程仓库

3.1 克隆

3.2 拉取和推送 

3.3 创建本地分支


1、安装与简介

1.1 安装

点击官网安装包下载链接,选择操作系统 ,我这里安装的是windows 64位的。

git安装包下载

下载后双击安装即可,没什么注意事项。 安装后,鼠标右键,到能下图两个选项,表示成功。

1.2 简介

这部分内容,想用通俗易懂的话,理解核心名词的含义,并理顺它们之间的关系。

  • 工作区:编辑代码的地方(一般在自己电脑上),代码特指整个工程目录。
  • 暂存区:一个中间索引区域,工作区内容有修改后,需要先手动添加至暂存区,该区会记录每一次变化内容,存储于.git目录中。
  • 分支:每一个分支,都是一个独立的开发线,允许并行工作。一般用于多个版本,或多人开发,多个分支,各自在自己的分支上工作。
  • 版本库:需将暂存区内容手动提交至版本库,也是位于.git目录下,版本库会包含所有分支,而在每一个分支下,又会存储提交的所有快照(每次从暂存区提交的内容)。
  • 仓库:包含工作区和版本库的整体结构,特指工程目录下所有问价+.git目录。

理解上述内容后,日常工作中,也会碰到本地分支/远程分支,或者本地仓库/远程仓库等概念。

  • 本地仓库:通俗理解,就是代码存储在你的本地机器上,与远程仓库相对,可以通过网络与远程仓库进行交互(如推送和拉取)。
  • 远程仓库: 代码存储在云端服务器上,可供大家共享与修改。
  • 本地分支:是指本地仓库中存在的分支。
  • 远程分支:是指在远程仓库中存在的分支。

其中,本地分支会以普通名称显示,远程分支通常会以 remotes/origin/name形式显示。如下图,master就是本地分支,其余红色部分是远程分支。

2、本地仓库

2.1 设置用户信息

本地使用git工具,可在首次设置用户信息。具体操作:鼠标右键,选中打开Git Bash Here。

设置用户信息命令。

# 设置用户名和邮箱
git config --global user.name 用户名
git config --global user.email 邮箱

#示例
git config --global user.name 小红
git config --global user.email 996685qq@.com

设置成功后,一般会在c/user目录下,新建一个.gitconfig文件,保存用户信息。如果找不到,就使用搜索功能,我这的存放目录是C:\Users\Administrator\.gitconfig。

2.2 创建本地仓库 

在工程代码的主目录下,右键,选中打开Git Bash Here,键入初始化命令。

#初始化
git init

成功后,会生成一个.git目录,也会默认创建一个主分支master。

没看到.git目录,也不要慌,可能是目录被隐藏了。点击查看->勾选上“隐藏的项目”,即可看到。

如果想删除,刚初始化的git仓库

#在 Windows 系统上,打开命令行(cmd)并运行
rmdir /s /q .git


#在 Mac 或 Linux 系统上,打开终端并运行:
rm -rf .git

2.3 查看分支

查看所有分支,前面讲过,初始化时默认会创建一个主分支master。

#查看所有分支
git branch -a

#查看远程分支
git branch -r

但这里,使用命令查看,什么都没有。为什么?先留一个悬念。

2.4 查看仓库状态 

#查看仓库状态
git status

如下图所示,这里是初始化后默认生成的主分支master,且未进行任何操作,而显示的状态。

查看仓库状态,你会得到以下几个关键信息,以上图为例子,阐述说明。

  1. 显示当前所在分支名称:on branch master(在master分支);
  2. 提交状态:No commit yet(未进行任何提交);
  3. 未跟踪文件:列出那些文件是尚未被跟踪的,如上图中红色字体。未添加到暂存区的文件,被称为“未跟踪文件”。
  4. 暂存区状态:显示那些文件已经被添加至暂存区,上图无,因为我们还没有手动执行任何操作呢。

2.5 添加暂存区 

#添加部分文件到暂存区
git add 文件名或文件夹名

#添加所有
git add .

#添加特定类型文件
git add *.txt

#示例
git add Main.py Icon/

执行示例命令后,如下图,我添加了一个py文件和一个Icon文件夹。

再次执行查看仓库状态,相较于第一次查看,多了一项 "Changes to be committed" ,直译过来就是提交前的改变,即暂存区内。

这样,绿色字体表示添加至暂存区。红色部分仍在工作区。

注意:添加到暂存区,并不等同于提交,所以还需手动提交至仓库。 

2.6 提交本地仓库 

注意:不能直接从工作区提交至本地仓库,只能先添加到暂存区,在提交到本地仓库。

#提交至本地仓库
git commit -m "提交信息说明,最好有意义,便于回溯"  暂存区文件名

#提交所有,包括未暂存的(跟踪但未添加暂存)
git commit -a -m "提交信息说明"

#示例
git commit -m “首次提交” Icon/

着重解释下,加上-a命令后,会提交所有,包括未暂存的(跟踪但未添加暂存),什么意思?

举个例子,假设A文件,首次被添加至暂存区(已变成了跟踪文件),可是在后来的操作中,A文件在工作区被修改过,但并未将其手动添加,这种就称之为 未暂存文件。

这个例子说明了,如下3点内容:

  • 只要添加过暂存区,就变成了跟踪文件。
  • 在工作区修改跟踪文件后,暂存区不会自动更新该文件,必须手动添加,暂存区才会记录修改内容。
  • 提交所有时,会将所有跟踪文件(暂存或未暂存的),先添加到暂存区,在提交。

执行示例命令后,如下图所示。 

 

此时,执行查看所有分支,示例图如下,主分支master已经存在了。这里是为了解惑,之前初始化后,查看分支没有的疑问。我理解的是,分支上有提交内容后,才会显示。

 

master显示为绿色,且前方带有 * 号,表示你当前处于分支master,接下来所有操作都是基于此分支进行的。 

2.7 创建和切换分支

# 创建新分支后,在切换到新分支
git branch name
git checkout name

#创建新分支,且直接切换到该新分支
git checkout -b name

#示例
git checkout -b 3.1

执行示例代码后,再次查看所有分支,如下图。新分支3.1创建后,直接切换。分支名以绿色显示,且前方带*号,表示你当前所处分支3.1。

新建分支3.1,是基于主分支master创建的,所以内容并不为空,而是复制master中的所有内容。

如何去确认呢?这里可以使用,查看分支差异命令。

#查看两个分支差异
git diff name1..name2

#示例
git diff master..3.1

执行示例命令后,无任何差异输出,再次验证了分支3.1是基于master创建的。

 

那是不是可以认为,每创建一个新分支,就是基于主分支的呢?

答案:不是的,我们可以做一个实验。

先在主分支上提交新内容,让主分支与分支3.1保持不同。然后切换到分支3.1后,在创建分支3.2,此时分别对比分支3.2与3.1,master的差异。会发现分支3.2与3.1无差异,这也就表明,创建新分支时,默认复制你当前所处分支内容。

#切换到主分支master
git checkout master
#检查切换成功
git branch -a
#主分支二次提交
git commit -m "二次提交" Main.py
#查看主分支与3.1差异
git diff master..3.1
#切换到分支3.1
git checkout 3.1
#创建分支3.2
git checkout -b 3.2
#分别查看分支3.2与3.1,master之间的差异
git diff 3.1..3.2
git diff master..3.2

windows下查看差异,碰到这种冒号:,之前键入 q ,即可退出。 

 

2.8 删除分支

删除分支前,切记,要先切换到其他分支,才能删除,否则报错。

#先切换分支,在执行删除
git checkout name1
git branch -d name2

#示例
git checkout master
git branch -d 3.1

2.9 合并分支

将原分支(你修改的分支)合并到目标分支。 

#切换到目标分支
git checkout target-branch

#合并分支,将原分支ori-branch合并到目标分支target-branch
git merge ori-branch

插个题外话,如果主分支master更新了(如添加新内容),3.1分支(创建时直接复制master分支的内容)不做任何操作,会自动更新吗?答案是不会的,需要手动更新(合并)。 

2.9.1 无冲突合并

举例,在3.2分支上,添加和提交新文件untitled.ui,然后合并到分支3.1。

2.9.2 冲突合并

Git中较为常见的冲突,一般是指内容冲突。

  • 同一文件的同一位置被不同分支修改。
  • 同一文件的不同位置被不同分支分别进行了修改,这种是没有直接冲突的,Git会自动合并,但是大部分修改会导致代码行的位置变化。

这里还是以举例子说明,分别在master、3.1分支下,修改Mainform.py中第9行的代码,且两分支修改内容不同,执行合并。

结果如下图,提示自动合并失败,冲突文件为Mainform.py,此时需手动调整冲突再次提交结果。

2.9.3 特殊情况

不知道大家有没有碰到这样的情况,在拉取主分支后,忘记切换到自己所属分支上了,然后就开始了创作(修改),等到提交的时候,发现自己竟然是在主分支上修改的。此时,既不想丢弃自己辛苦的创作,又想保持主分支干净(无任何修改痕迹)。所以,最好的结果,就是让修改内容提交到自己所属分支上,主分支保持原状。

以举例子方式,假如我在分支3.1下进行修改后,想同步合并到分支master上,但又不想提交至分支3.1(分支3.1保持未修改前状态)。

首先切换到3.1分支下,修改Mainform.py文件(添加一行代码)并保存后,直接使用命令切换至master分支,如下图,会提示Mainform.py文件有未提交的修改。

此时,已经成功切换到了master分支下,打开Mainform.py文件后,进行检查,是修改后的样子。然后,就可以直接执行添加暂存区和提交。

上述操作执行成功后,你在3.1分支上的修改内容,就同步提交到了分支master上。最后,不放心的,可以切换到分支3.1上,检查下修改内容是否提交到3.1上了,因为咱们没有在分支3.1上操作,所以就不会。 

2.9.4 常规选择

我们在某一分支上进行创作后,通常,你可以有三种选择:

1、 提交更改:切换到分支3.1后,执行添加暂存区和提交操作(git add / git commit)。

2、 放弃更改:切换到分支3.1后,执行放弃更改命令 git checkout --Mainform.py。

3、 暂存更改:如果你不想现在提交,可以使用Git暂存功能,等用时在恢复暂存。

第3中方式,不同于上述两种,无需先切换到分支3.1下,它在任何一分支下(前提是分支下有该文件),执行均有效。

还是以例子说明,我是直接在master分支下执行暂存,结果如下图所示。

执行后,会发现master分支下的修改消失了,3.1分支下的修改也消失了。然后,我尝试在3.1分支下,执行暂存,最终是同样的结果。

此外,我尝试了,在master分支下执行暂存,在3.1分支下执行恢复暂存,惊讶地发现两个分支下的修改同时消失,也同时恢复了。

我怀疑暂存和恢复功能,无需区分分支,是一个统一的动作。感兴趣的小伙伴可以尝试。

#查看更改
git diff 文件名

#暂存更改
git stash

#恢复暂存
git stash pop

#放弃更改
git checkout --文件名

2.9.5 Vim退出操作

操作过程中,如果碰到了如下的vim编辑界面,不知道怎么操作,看过来。

如下图所示,按 Esc 键,然后键入 :wq 来保存并退出。

还有碰见这种情况的,如下图所示,键入 q 字母即可退出。 

 3、远程仓库

在我们工作时,通常使用的是公司远程仓库,即一台云端服务器,不允许在上面开发,只存储代码。大家协同工作时,每个人都要先从远程仓库中克隆代码。

3.1 克隆

依旧是在你想存放代码的主目录下,右键->open Git Bash Here,键入克隆指令。

#克隆
git clone <repo-url>

克隆成功后,主目录下会自带.git目录。

查看所有分支,本地分支以分支名显示,远程分支通常以remotes/origin/分支名显示。

这个master本地分支,其实不是我们人为创建的。而是,在克隆远程仓库时,Git会自动为你创建一个本地分支,通常复制的是远程主分支master或main,具体取决于远程仓库的默认分支设置。

3.2 拉取和推送 

克隆后,默认创建的本地分支master会与远程分支remotes/origin/master建立跟踪关系。

此时,可以使用简单的拉取(从remotes/origin/master拉取最新代码到本地)和推送(将本地master修改内容推送到远端)命令。

#拉取
git pull

#推送
git push

 如果本地分支,并没有与远程分支建立跟踪关系,在拉取和推送时,需注明远程分支名称。

git pull remotes/origin/master
git push remotes/origin/master

3.3 创建本地分支

克隆成功后,本地分支通常与远程仓库的主分支建立跟踪关系,在本地进行开发后,可能会不小心推送到远程,破坏了主分支,就会影响到别人。

这种情况,建议在远程仓库中,创建一个独属你的分支own。进而在本地,创建一个新分支,是基于远程仓库中独属你的分支owm。这样,你在本地任何开发,一不小心推送到远程,也不用担心,毕竟也影响不到别人。

#基于远程分支创建本地分支,并切换
git checkout -b branch_name remote/origin/name

基于远程分支9.1,新建了一个本地分支9.1,这两个分支是建立了跟踪关系的。 

跟踪关系具有传递性?不具备,需手动添加。

假如新建一个本地分支9.2,是基于本地分支9.1创建的。因为本地分支9.1 与远程分支9.1建立了跟踪关系的,那本地分支9.2会不会与远程分支9.1建立跟踪关系呢? 

答案是不会的,需要自己手动添加。

以上内容,纯属自己所想所写,如有不对,欢迎评论区更正!!!

以后如有新想法,会持续更新!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值