IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> git基础教程 -> 正文阅读

[开发工具]git基础教程

git介绍

分布式版本控制系统

SVN是集中式版本控制系统,版本库放在中央服务器,干活首先要从中央服务器得到最新的版本,然后干活,干完后把自己做的活推送到中央服务器。而且集中式版本控制系统是必须联网才能正常工作。

Git是分布式版本控制系统,没有所谓中央版本控制系统,每个人的电脑就是一个完整的版本库,工作的时候无需联网。

git安装配置

官网下载傻瓜安装,
安装完成后,需要在git bash中进行配置:

配置你的名字和Email地址

$ git config --global user.name "Your Name"
$ git config --global user.email "1042426695@qq.com"

之后我们可以查看一下用户名和邮箱(自己的用户名和邮箱)

$ git config user.name
$ git config user.email

是否报错,报错进行如下操作:
打开如下路径下的文件C:\Users\Administrator.git

打开config,进行修改:
[user]
email = 1042426695@qq.com
name = Your name

Git本地仓库操作

创建版本库

版本库(repository)也叫做仓库,可以看作是一个目录,这个目录里的所有文件都由Git进行管理,每个文件的修改、删除、Git都能跟踪。

1、找一个合适的地方,创建一个空目录
$ mkdir learngit //创建一个名为learngit的空目录
$ cd learngit //把learngit设置为当前目录
$ pwd //查看当前目录
//windows系统要保证文件目录名不包含中文
2、通过git命令把这个目录变成Git可以管理的仓库
$ git init
Initialized empty Git repository in /Users/Administrator/learngit/.git/

这样git就把仓库建好了,在目录文件下多了一个.git的目录,这个目录是Git用来跟踪管理版本库的。

3、把文件添加到版本库
我们在learngit目录下编写一个readme.txt文件,内容如下:
Git is a version control system.

(1) git add命令,把文件添加到仓库:

$ git add readme.txt

执行以上代码,没有任何显示。
(2)git commit命令,把文件提交到仓库:

$ git commit -m "wrote a readme file" //-m后面输入的是本次提交的说明,可以输入任何内容

(3)修改文件
修改readme.txt中的文件。
运行git status命令查看文件状态,add之后状态改变,commit之后清空。
git ls-files命令是用来查看暂存区中的文件信息

$ git status

可以看到readme.txt文件的状态为modified,意为被修改,但是没有提交。
如果我们想知道上次修改了什么地方,可以使用git diff readme.txt
接下来还是前两步:
git add
git commit
(4)版本退回
如果我们继续对readme.txt进行修改,git仓库里已经有三个版本的readme,我们可以用git log命令进行查看:
git log查看日志 可以加上–pretty=oneline参数
现在如果我们想把readme.txt文件退回到上一个版本,就可以用git reset命令:

$ git reset --hard HEAD^ //HEAD表示当前版本,则HEAD^表示上一个版本,那么上上版本就是HEAD^^

版本退回之后用cat查看一下readme.txt的内容
我们这时又想让其回到刚刚那个最新的版本:
还是用git reset命令:

$ git reset --hard 1094a //

这里就不能用HEAD了,要用commit id,下面为获取commit id的方法:

获取完整commit id: git rev-parse HEAD
获取短commit id: git rev-parse --short HEAD

工作区和暂存区

工作区(Working Directory)
	learngit 文件夹就是一个工作区
版本库(repository)
	工作区中的隐藏目录.git,这个不算工作区,而是Git的版本库。
版本库里面的index(stage)文件叫暂存区,还有Git自动为我们创建的第一个分支master,以及指向master的一个指针叫做HEAD。

在这里插入图片描述
结构如上图。
前面提到的如果我们要把文件添加到Git里面,需要两步:

第一步git add把文件添加进去,实际上就是把文件添加到暂存区。
第二部git commit提交更改,世界上就是把暂存区的所有内容提交到当前分支。(我们目前就只有唯一一个分支master,所以现在就是向master分支提交更改)

例如:
新建一个license文件,编写任意内容,再将原来的readme.txt文件内容进行修改。
查看git status就可以看到这两个文件一个状态为new file,一个状态为modified。
这是暂存区的状态就变为:
在这里插入图片描述
这时我们使用git commit将暂存区的文件进行提交到master分支。
提交后,再git status就可以看到暂存区就变成干净的。

修改管理

Git跟踪、管理的不是文件,而是修改。

例如我们对readme.txt文件进行修改,然后
git add readme.txt 将其加入缓存区
然后再修改readme.txt随后
git commit -m “git tracks changes”

这时通过git status查看状态,可以看到还是有一个modified:readme.txt
第二次修改并未提交,工作区的第一次修改被放入缓存区,准备提交,而工作区的第二次修改没有放入缓存区,
所以,git commit命令只是负责把缓存区的修改提交了。

提交后,我们可以用git diff HEAD – readme.txt 命令去查看工作区和版本库里面最新版本的区别。

撤销修改

假如我们刚刚对readme的修改有点错误,想删除最后一行:

(1)当我们没有git add放入缓存区时,可以手动删除;
也可以通过git checkout – readme.txt 该命令意为撤销在工作区的修改。
这里的checkout意为检出的意思,将HEAD指向某个分支最近的一次commit,然后从commit恢复index,最后index恢复工作区。
也可以理解为将暂存区/版本库的版本拉到工作区进行替换。

(2)当我们已经git add放入缓存区之后,但是没有git commit时,
可以使用git reset HEAD readme.txt将暂存区的修改撤销掉,重新放回工作区。
git reset不仅可以回退版本也可以将暂存区的修改回退到工作区。

删除文件

在learngit文件夹下创建一个test.txt,这时候用rm命令删除,rm test.txt
之后就分为两种情况:
(1)确实要删除,用git rm删除,并且git commit -m 'remove test.txt’提交删除。
这时候文件就从版本库中被删除了。
(2)文件被删错了,因为暂存区/版本库里有文件,所以很好恢复:git checkout HEAD – test.txt用版本库里的替换工作区里的。

Git与远程仓库交互

以Github为例

首先,创建github账号,因为本地git仓库和github之间通过ssh加密传输,所以需要:
(1)创建SSH key,在用户主目录下users/administrator/.ssh 下面,没有就在git bash中:
查看有无:~/.ssh
创建:ssh-keygen -t rsa -C ‘邮箱’ 默认生成id_rsa 和 id_rsa.pub两个密钥文件。
(2)登录Github,打开Account setting,点击Add SSH and GPG Keys,点击New SSH Key的创建,填上任意
Title,把id_rsa.pub中的内容复制到key文本框中确认。

添加远程库

目前我们本地已经有了一个Git仓库,需要在Github上创建一个远程仓库,用来备份和与他人协作开发。本地库和远程库远程同步。

首先,在github中’Create a new repository‘按钮,创建一个新仓库,命名为learngit

远程仓库创建好后,就可以在本地输入如下命令:
git remote add origin git@github.com:ZDHWYL/ZDHWYL.git //这个地址可以在你仓库的右上角绿色CODE中找到
添加后,远程库的名字就是origin,这是Git默认的叫法
git remote用于操作远程库:
git remote -v显示所有远程仓库
git remote add添加远程版本库
git remote rm name删除远程仓库
git remote rename old_name new_name修改仓库名
然后就可以把本地库的所有内容推送到远程库上:
git push将当前分支master推送到远程仓库。
因为是第一次推,远程库是空的,所以要加上-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,
还会把本地的master分支和远程的master分支关联起来。以后的推送和拉取就可以简化命令。
推送成功后,可以立刻看到Github中的远程库中内容和自己的本地库内容一样。

自此,我们才真正拥有了分布式版本库。

从远程库克隆

我们的学习过程是先有了本地库,后有了远程库,然后两者进行关联。
现实中大部分时候是先创建远程库,再从远程看看克隆。
git clone 仓库地址

创建、合并、删除分支

在之前的操作中,我们只有一条master分支,HEAD指向当前分支。
我们创建一个dev分支,然后切换到dev分支上:
git checkout -b dev创建并切换分支
相当于以下两条:git branch dev****git checkout dev
git branchname 查看分支

当我们在dev分支中进行修改文件,比如在test.txt文件末尾加上一行hello world
add、commit之后切换到master分支进行查看,发现test.txt没变,因为不是一个分支。

合并分支: 在master分支上使用git merge dev合并dev分支内容。
继续查看test.txt内容,可以看到最后一行的hello world已经有了。

git merge用于将指定的分支合并到当前分支,可以注意到git bash中显示Fast-forward,意思是
这次合并是快速合并,HEAD直接指向了dev的最近一次的提交。

当我们弃用某一个分支的时候,可以删除:git branch -d dev
命令合集:
查看:git branch
创建:git branch dev
切换:git checkout dev
创建+切换:git checkout -b dev
合并指定分支到当前:git merge name
删除分支:git branch -d dev

克服冲突

还是上面dev的例子,dev中test.txt最后一行写hello world,
master的test.txt最后一行写fuck world,然后再在master上merge dev分支
你就发现报冲突了,merge failed, conflicts等,
git会用
<<<<< HEAD
主分支冲突内容
/=========
其他分支冲突内容

dev
显示冲突。需要手动更改后保存合并

git log可以查看分支合并情况。

分支管理策略

通常合并分支会用fast-forward模式,这种模式下,删除分支后会丢失分支信息,可以使用带参数的-no-off来禁用fast-forward模式。

bug分支

创建bug分支修复bug,如果所在分支有未提交的任务,可以使用git stash暂时隐藏未提交任务,等恢复现场后继续工作。git stash list查看任务,git stash apply恢复,git stash drop删除list中任务,git stash pop相当于执行前两条。

多人协作

当我们从github远程库中clone项目时,实际上Git已经自动把本地master繁殖和远程master分支对应起来了,并且远程库默认名称为origin。
git remote查看远程库信息
git remote -v查看远程库详细信息

(1)推送分支
推送分支就是将该分支上的所有本地提交提交到远程库中,推送时要指定本地分支,这样Git就会把该分支推送到远程库对应的远程分支上,使用命令:git push origin master
(2)抓取分支
例如A同事git push origin dev推送dev分支到远程
B同事克隆库之后,创建远程origin的dev分支到本地来 git checkout –b dev origin/dev然后在dev分支进行开发,
开发完成后将dev分支推送到远程库。git push origin dev
这时我也像B同事一样,对同一个文件同一个位置进行了修改,在我提交时报错。
推送失败,因为我的小伙伴最新提交的和我试图推送的有冲突,解决的办法也很简单,上面已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后在本地合并,解决冲突,再推送。
git pull意为从远程获取代码并合并本地的版本。
先指定本地dev分支与远程origin/dev分支的链接,设置dev和origin/dev的链接,如下:
git branch --set-upstream dev origin/dev关联
git pull因为上面关联了,不用指定远程的分支。
pull完显示有冲突,解决冲突后再pull,再push。
参考链接: https://blog.csdn.net/doublepg13/article/details/119149211
一般的提交流程:先用git push origin branch-name推送自己的修改.
如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送

工作使用Git

待续…

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:37:47  更:2022-05-11 16:38:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 15:17:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码