笔记搬运工——GIT简介与基本操作

Git版本控制详解
本文详细介绍Git版本控制系统的优势、工作流程及常用命令。包括本地库与远程库操作、分支管理等核心概念,帮助开发者高效协作。

忘性大的Leslie 澄澈秋水 1周前

(Leslie根据b站学习视频整理:https://www.bilibili.com/video/av24736323/?p=1,这个老师讲的挺好,推荐~喜欢这个老师的笔记风格,但是没法获取,自己简单记一些~~凑合看吧)

 

版本控制:

分布式

1、协同修改

2、数据备份:可以保留历史状态

3、版本管理:svn是增量式管理,git是文件系统快照

4、权限控制

5、分支管理

集中式:SVN

分布式:git,可避免单点故障

 

git简介

优势:

1、大部分操作在本地完成,不需要联网

2、完整性保证

3、尽可能添加数据而不是删除或修改数据

4、分支操作非常快捷流畅

5、与Linux命令全面兼容

工作区--git add--暂存区--git commit--本地库

 

本地库和远程库

团队内:

本地库1--push--远程库--clone--本地库2--pull--本地库1

团队外:

远程库1--fork--远程库2--clone--本地库A--push--远程库2--pull request--审核--merge--远程库1

 


git命令行操作

本地库操作

1、本地库初始化:

git init---创建了一个.git目录,里面是本地库相关的子目录和文件,不要删除和修改

2、设置签名:

需要用户名和email地址,作用是为了区分不同开发人员,和代码托管中心的账号密码无关

用户名:tom

email:goodMorning@atguigu.com

 

项目级别/仓库级别:仅在当前本地库范围

  • 命令:git  config  user.name tom_pro

  • git config user.email goodMorning_pro@atguigu.com

  • 信息保存的位置:当前项目目录的.git/conf目录

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

  • 命令:git  config  --global  user.name tom_pro

  • git  config  --global user.email goodMorning_pro@atguigu.com

  • 信息保存的位置:家目录(~)下 ~/.gitconfig

优先级:就近原则,项目几倍优先于系统用户级别,如果只有系统用户级别签名,就以系统用户级别为准,二者都没有是不允许的

 

命令:

1、git status:查看工作区、暂存区状态

2、git add [file name]:提交到暂存区,首次必须执行

3、git rm --cached [file name]:撤销提交到暂存区的操作,文件还在工作区

4、git commit [file name]:提交到本地库,打开vim编辑器输入提交信息

5、git commit -m "提交信息"  [file name]:提交到本地库

6、git log:查看历史版本,HEAD指向当前版本,

补充(多屏显示的操作):空格向下翻页、b向上翻页、q退出

    6.1、git log --pretty=oneline:日志以一行的形式展示

    6.2、git log --oneline:日志的哈希值选择部分,历史记录只能显示之前的,指针若指之前版本,后面版本不显示

    6.3、git reflog:显示HEAD需要移动的步数,HEAD@{移动需要几步}

7、HEAD的前进后退

    7.1、基于索引值[推荐],可以后退也可前进

    git reset --hard [局部索引值]

    7.2、使用^符号:只能后退,一个^代表后退一步

    git reset --hard HEAD^^^

    7.3、使用~符号:只能后退,~3代表后退3步

    git reset --hard HEAD~3

 

reset命令的三个参数对比

--soft参数:仅仅在本地库移动HEAD指针

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

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

8、删除工作区文件:

rm [file name]

 

恢复工作区文件思路:

①工作区删除文件后,执行git status会看到文件是待提交到暂存区状态,

②使用git add,可将删除文件提交到暂存区,

③然后再执行git commit -m "delet file"到本地库,工作区文件虽然不在了,但是文件的记录会在本地库中,

④使用git reflog可以查看日志,然后进行后退git reset --hard [局部索引值]的操作,可恢复工作区文件

注:若删除后,只使用了git add,将删除提交到暂存区,但是未执行commit将删除提交到本地库,此时恢复可使用git reset --hard HEAD即可,因为此时本地库中HEAD指针还在删除前的那条记录

9、查看差异

git diff [file name]:工作区当前文件和暂存区进行比较

git diff HEAD [file name]:工作区当前文件和本地库进行比较

git diff HEAD^ [file name]:工作区当前文件和本地库上一个版本进行比较,其他同理

git diff :多个文件比较

 


分支管理

在版本控制过程中,使用多条线同时推进多个任务

主干分支:master

好处:

1、同时并行推进多个功能开发,提高开发效率

2、各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可

分支的操作:

1、查看分支:

git branch -v

2、新建一个分支(例:新建一个hot_fix分支):

git branch hot_fix

3、切换分支(切换到hot_fix分支):

git checkout hot_fix

4、合并分支

第一步:切换到接受修改的分支上,相当于切换到master分支

git checkout master

第二步:追踪修改分支到master分支上

git merge hot_fix

5、合并冲突

第一步:先使用git merge 进行合并

第二步:提示合并失败,并且分支后有MERGING的提示

第三步:进入冲突的文件,查看具体的冲突,进行编辑并保存

第四步:使用git status查看状态,待提交到暂存区,git add 一下,提交到暂存区

第五步:查看状态,待提交到本地库,git commit -m 提交到本地库(特别注意:此时commit时一定不加文件名,否则提交失败)

 


git基本原理

哈希

是一个系列的加密算法

1、不管输入数据的数据量多大,输入同一个哈希算法,得到的加密结果长度固定

2、算法确定,输入数据确定,输出数据不变

3、算法确定,输入数据又变化,输出一定有变化,而且变化很大

4、算法不可逆

哈希算法可以用来被验证文件,对比传输前后的哈希值是否一致,git采取sh1算法

对git分支的理解

git分支可以理解为,文件提交是链条式的,首次提交后,后面的提交都是基于之前的提交形成了一种父子关系,每个文件的版本都会指向上一个版本,而git新建分支并不会像svn去完全复制一套文件出来,而是像指针一样指向了文件的版本,而当前所在的版本又是由HEAD去指向的。

所以,合并分支时的两步可以理解一下,第一步是切换接受修改的分支,相当于把HEAD指针指向被修改的分支;二是merge修改的分支,相当于HEAD带着分支的指针,指向被修改分支指向的文件版本的位置

 


远程库操作

1、在本地库给远程库起名:

git remote add [起的名字] [远程库地址]

2、在本地库查看远程库(fetch取回,push推送)

git remote -v

3、在本地库推送分支

git push [给远程库起的名字] [本地库分支]

4、从别人的远程库到自己的本地库

git clone [别人远程库地址]

(注:clone下来以后,可以提交到本地库,但是无法push到远程库,因为没有权限,需要远程库的作者把你加入团队

GitHub加入团队:setting--collaborators--添加被邀请加入团队人的GitHub账号---提交后copy地址发给被邀请者,让被邀请者在登录账号下被访问地址,accept)

5、把自己本地库分支推送到别人远程库

git push [远程库起的名字] [本地库分支]

6、从修改过的远程库拉取到本地

pull相当于fetch和merge的结合,fetch只是把远程库拉取到本地库【git fetch [远程库别名] [远程分支名]】,但是工作区还是原来的,merge后才是合并到本地工作区【git merge [远程库别名]/[远程分支名]】

git pull [远程库别名] [远程分支名]

7、与远程库发生冲突如何解决

 


团队外

远程库1---fork---远程库2---git clone---git push---远程库2----pull request---远程库1审核----merge----远程库1

1、团队外成员访问远程库1地址在github上点击“fork”

2、克隆,修改,提交远程库2

3、github上点击pull request--new pull request---create pull request

4、远程库1操作者在github上点击pull request,可以在里面对话---审核代码,点击commit或files change----merge pull request----填写日志信息---commit

5、git pull,拉取到本地

 


使用ssh登录,push到远程库不需要登录了

1、在家目录(~)下创建.ssh目录:

ssh-keygen -t rsa -C [github邮箱地址]

2、查看目录里的id_rsa.pub文件:cat id_rsa.pub

3、复制文件内容,登录github,点击头像---settings---SSH and GPS keys

4、New SSH Key

5、输入复制的密钥信息

 


eclipse特定文件,不提交到本地库,因为eclipse版本不同,这些文件也不同,会产生冲突:

.classspath

.project

.settings

target

在家目录下新建java.gitignore

在.gitconfig中添加

[core]

    excludesfile = C:/Users/用户名/java.gitignore

 


补充:

 

微信扫一扫
关注该公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值