【Git&GitHub 本地库操作 01】

一、Git结构

工作区:写代码的区域,新建的文件等

暂存区:暂时存放代码的区域,准备提交但是还提交,即保存文件的区域

本地库:提交代码的区域

工作区写了代码通过git add命令提交到暂存区,暂存区通过git commit命令提交到本地库

二、Git和代码托管中心

托管中心其实就是远程库

1、局域网环境下的代码托管中心:

  • GitLab服务器

2、外网环境下的代码托管中心:

  • GitHub
  • 码云

 三、本地库和远程库的关系

1、团队内部协作

2、跨团队协作

 

 三、Git命令行操作

本地库操作

前提:创建一个文件夹,终端进入此文件夹内,进行后续操作。

1、本地库初始化:

  • 命令:git init
MacBook-Pro-2:Git wufq$ git init
Initialized empty Git repository in /Users/wufq/Desktop/Git/.git/

此命令的作用其实就是创建一个.git文件(此文件是隐藏文件)

mac系统参考文件:

https://blog.csdn.net/lu1024188315/article/details/74080021

https://www.cnblogs.com/hd92/p/13554229.html 
  • .git文件创建以后的目录

 2、配置个人信息(姓名和邮箱,目的是告诉git上的其他用户知道你是谁)

|--  项目级别和仓库级别:仅在当前本地库范围内有效

--> 命令:

配置姓名
$ git config user.name zhaoliyin
配置邮箱
$ git config user.email 183xxx5141@qq.com

备注:这里设置的用户名和登录远程库(代码托管中心)的账号密码没有任何关系

 --> 配置完以后,信息保存位置: ./git/config

 

 |-- 系统用户级别:登录当前操作系统的用户范围

 -->命令:

$ git config --global user.name zhaoliyin
$ git config --global user.email 183xxx5141@qq.com

-->配置完以后,同样会保存到 ~/.gitconfig文件内

|-- 级别优先级

  就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名

  如果只有系统用户级别的签名,就以系统用户级别的签名为准

  二者都没有不允许

2、基本操作

|-- 状态查看:git status  (查看工作区,暂存区状态)

|--  添加:git add [file name](将工作区的“新建/修改”添加到暂存区)

|-- 提交:git commit -m "commit message"  [file name](将暂存区的内容提交到本地库)

    -m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

    同样可以添加多个文件:

      -->   $ git add file1.txt

      -->  $ git add file2.txt file3.txt

      -->  $ git commit -m "add 3 files."

|-- 查看历史记录:git log

 

上图信息:commit是提交,aeb9...这一长串其实是哈希值,HEAD是一个指针,指向当前版本:HEAD -> master 指的是指向master的版本

 多屏显示控制方式:空格向下翻页,b向上翻页,q退出

git log --pretty=oneline

 git log --oneline

 git reflog

HEAAD@{移动到当前版本需要几步}

 |--reset命令的三个参数对比

-->  --soft参数:仅仅在本地库移动

-->  --mixed参数:在本地库移动HEAD指针;重置暂存区

-->  --hard参数:在本地库移动HEAD指针;重置暂存区和工作区

|--  前进后退

基于索引的操作:git reset --hard 27b6184    (27b6184指的是索引)

使用^符号:只能后退  git reset --hard HEAD^^^   (一个^代表后退一步,n个就代表后退n步)

使用~符号,只能后退  git reset --hard HEAD~n  (表示后退n步)

举例:验证版本之间的回退

1、先在工作区创建一个文件vs.log,此文件内容为两行,然后提交到暂存区和本地库

2、通过 git reflog查看历史记录,可以看到HEAD指向了“第一次提交vslog”这个版本

 3、vslog.txt文件新增加两行,然后提交到暂存区,在提交到本地库

4、通过 git reflog查看历史记录,可以看到HEAD指向了“增加两行vslog”这个版本

5、回退到上一版本,也就是“第一次提交vslog”文件的那一版,命令:git reset --hard HEAD^

 6、用git reflog 查看历史版本,这时候HEAD又指向了“move to HEAD^”,也就是指向了删除的哪一条记录

 7、用git reset --hard HEAD d3f50eb   恢复到新增加的那一版

总结:这个例子就是验证文件采用reset来进行不同版本之间的退回(应用场景如:新提交的这一版本的代码有问题,可以回退到上一版本,新提交的代码不小心被删除了,又可以被恢复)

|-- 删除文件并找回

前提:删除前,文件存在的状态提交到了本地库

操作:git reset --hard [指针位置]

-->  删除操作已经提交到本地库:指针位置指向历史记录

--> 删除操作尚未提交到本地库:指针位置使用HEAD

|-- 比较文件差异

-->  git diff [文件名]    将本地区文件和暂存区文件进行比较

 

 -->  git diff [本地库中历史版本] [文件名]     将工作区的文件和本地库的文件进行比较

(git diff HEAD^^ vslog.txt   表示:HEAD^^指的是上上个版本和工作区进行的一个比较)

-->  不带文件名比较多个文件

(git diff HEAD^^  HEAD^^指的是上上个版本和工作区进行的一个比较  多个文件的一个比较)

3、分支管理

|-- 分支的概念:在版本控制过程中,使用多条线同时推进对个任务

|-- 分支操作:

创建分支:git branch [分支名]

查看分支:git branch -v

 

图上所知:当前分支在master

切换分支:git checkout [分支名]

 

 已经切换成功,当前分支在hot_fix上

合并分支

-->  第一步:切换到接受修改的分支(被合并,增加新内容)上(比如:修改了test_fox分支上的test.txt文件,需要合并到master分支上)

合并代码:git checkout [被合并的分支]

--> 第二步:执行 merge命令

 git merge [有新内容的分支名]      (比如:git merge master)

 

 test_fox分支和master分支,都修改test.txt文件,并且都是在第四行修改的内容,修改以后master分支合并到test_fox分支,然后就弹出来了冲突的提示信息

解决冲突

--> 冲突的表现:

 

 -->冲突的解决:

步骤:1)编辑文件,删除特殊符号

2)把文件修改到满意程度,保存退出

3)git add [文件名]

4)git commit -m "日志信息"

注意:此时的commit 一定不能带具体文件名,否则会报错

 

posted @ 2020-12-31 11:47  尘封~~  阅读(127)  评论(0编辑  收藏  举报