Git学习笔记

参考文献:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg

一、概述

Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
下图就是分布式版本控制工具管理方式:图片1

二、git工作流程

一般工作流程如下:

  1. 从远程仓库中克隆 Git 资源作为本地仓库。
  2. 从本地仓库中checkout代码然后进行代码修改
  3. 在提交前先将代码提交到暂存区。
  4. 提交修改。提交到本地仓库。本地仓库中保存修改的各个历史版本。
  5. 在修改完成后,需要和团队成员共享代码时,可以将代码push到远程仓库。
    下图展示了 Git 的工作流程:图片2

三、下载和安装

下载地址
安装:按照官方推荐选项,一路默认点击确定即可。
右击鼠标,查看是否有Git Bash Here选项,若有,则安装成功。
启动git。在当前目录中点击右键中选择Git Bash来启动。
图片3
图片4

四、工作区和暂存区介绍

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
什么是工作区(Working Directory)?工作区就是你在电脑里能看到的目录,比如我的reporstory文件夹就是一个工作区。有的同学可能会说repository不是版本库吗,怎么是工作区了?其实repository目录是工作区,在这个目录中的“.git”隐藏文件夹才是版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
如下图所示:
图片5
分支和HEAD的概念我们稍后再讲。前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

五、Git常用命令

1. 本地库初始化

git add     # 注意:初始化之后,会生成一个.git文件夹,可以使用 ll -lA查看,.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。

2. 设置签名

用户名:taitao

Email 地址:ttai@mail.ustc.edu.cn

作用:区分不同开发人员的身份

  • 辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。
  1. 项目级别/仓库级别:仅在当前本地库范围内有效 ,信息保存位置:./.git/config 文件
git config user.name tom_pro  
git config user.email goodMorning_pro@atguigu.com
  1. 系统用户级别:登录当前操作系统的用户范围,信息保存位置:~/.gitconfig 文件
git config --global user.name tom_glb
git config --global goodMorning_pro@atguigu.com

查看系统级别设置的签名

cd ~    			// 回到家目录下
cat .gitconfig		//查看系统用户级别签名
  • 级别优先级
    就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别 的签名 
    如果只有系统用户级别的签名,就以系统用户级别的签名为准 
    二者都没有不允许

3. 基本操作

git status      #查看工作区、暂存区状态
git add [file name]     #将工作区的“新建/修改”添加到暂存区 
git commit -m "commit message" [file name]  #将暂存区的内容提交到本地库 
git log     #查看历史记录
git remote -v   #查看当前所有远程地址别名 
git remote add [别名] [远程地址]        #创建远程库地址别名
git push [别名] [分支名]        #推送
git origin [远程地址]       #克隆

git fetch [远程库地址别名] [远程分支名] #拉取与合并,其中 pull=fetch+merge
git merge [远程库地址别名/远程分支名] 
git pull [远程库地址别名] [远程分支名]

  • 解决冲突
    如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉取。 
    拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可

  • 多屏显示控制方式:

空格    #向下翻页 
b       #向上翻页 
q       #退出 
git log --pretty=oneline
git log --oneline
git reflog
  • 前进后退
#基于索引值操作[推荐] 
git reset --hard [局部索引值] 
git reset --hard a6ace91 

#使用^符号:只能后退 
git reset --hard HEAD^ 
#注:一个^表示后退一步,n 个表示后退 n 步 

使用~符号:只能后退 
git reset --hard HEAD~n 
# 注:表示后退 n 步
  • 删除文件并找回

    前提:删除前,文件存在时的状态提交到了本地库。
git reset --hard [指针位置]

删除操作已经提交到本地库:指针位置指向历史记录
删除操作尚未提交到本地库:指针位置使用 HEAD

  • 比较文件差异
    git diff [文件名]  将工作区中的文件和暂存区进行比较
    git diff [本地库中历史版本] [文件名]  将工作区中的文件和本地库历史记录比较
    不带文件名比较多个文件

六、分支管理

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

git branch [分支名]     #创建分支 
git branch -v           #查看分支 
git checkout [分支名]   #切换分支 

#合并分支 
#第一步:切换到接受修改的分支(被合并,增加新内容)上 
git checkout [被合并分支名]
#第二步:执行 merge 命令 
git merge [有新内容分支名]
  • 冲突的解决
#第一步:编辑文件,删除特殊符号
#第二步:把文件修改到满意的程度,保存退出
#第三步:git add [文件名]
#第四步:git commit -m "日志信息"
#注意:此时 commit 一定不能带具体文件名

七、连接远程库和本地库

图片6

1. 创建远程库
创建好之后,会得到该创库的地址:https://github.com/FelixTt/advancedSoftwareEngineering.git
2. git init    #在本地新建本地库并且初始化(在适合文件夹下git bash)
3. git add [文件名]    #将新写好的文件添加
4. git commit -m “提交注释”    #提交文件
5. git remote add origin   
#关联本地库和远程库 https://github.com/FelixTt/advancedSoftwareEngineering.git
#注意:这一步是将长长的链接起一个别名origin,可以使用git remote -v 来查看列出已经存在的远程分支。

6. git pull    #上传前需要pull代码,然后消除差异
   git pull origin master --allow-unrelated-histories
7. git push [别名] [分支名]     #上传代码
                                #例如:git push origin master

八、场景演练

场景一:Git本地库的基本用法

图片7
图片8
鼠标右键,点击git bash here,出现上图的命令行窗口。

git init 	#初始化一个本地版本库
git status # 查看当前工作区(workspace)的状态
git add [FILES] # 把文件添加到暂存区(Index)
git commit -m "wrote a commit log infro” # 把暂存区里的文件提交到仓库

场景二:Git 远程版本库的基本用法

首先在github上创建一个远程库,然后再vs code中点击克隆库,将github上该仓库的链接复制到下图的框中,即可从github中克隆好项目到本地存储下来。
图片9
在本地中,即可看到一个隐藏的.git文件夹。
图片10
在本地中新建一个文件,就可以看到该文件未被添加到暂存区,也没有提交到本地库,并且在该文件右侧出现一个“+”的标志,点击“+”,即可将文件添加到暂存区。再按照下图流程,将文件提交到本地库。最后push到远程仓库。
图片11
图片12
图片13
图片14
此时,就在远程仓库中,就会出现在本地提交的文件。

场景三:团队项目中的分叉合并

创建一个新分支,并且切换到该分支下,创建hello.txt,并且合并到主干master上。
图片15
将新建的文件添加到暂存区和提交到的本地仓库,再将文件提交到远程仓库中。
图片16

场景四:Git Rebase

在输入命令 git log后,可以看到之前操作的历史记录。

图片17

在输入git rebase -i HEAD~3后,打开文本编辑器,删除pick 09a8af4 modifying add这一行,其操作和vim相同。

图片18

在保存退出之后,再次 git log,发现删除了一些历史纪录了。

图片19

posted @ 2020-10-11 12:46  i_simple  阅读(93)  评论(0编辑  收藏  举报