Git学习

魏落阳城 -
Git学习

写在前面:最近看了一个关于Git的教程,对Git的各项操作有了较全面的了解,当然和实际工作还有差距,在此做一个小结义工之后复习。

Git的介绍和安装就不在赘述。

Git本地仓库的创建及配置

选择一个文件路径进入命令行输入git init,及完成了一个本地仓库的初始化。此时会生成一些隐藏文件夹,对象库和配置文件等都在其中。

然后进行一些基本信息的配置

git config --global user.name "输入姓名"
git config --global user.email “输入邮箱”
git config --global color.ui true   //此处是打开颜色差异选项
Git三大逻辑区

三大区

工作区:当前分支下新建或修改文件的地方,当切换到不同分支工作区会刷新。文件状态有两种:untracked,tracked

版本库:

暂存区:及index,当执行git add .时,工作区的所有文件被提交到暂存区,objects会生成若干个blob对象,暂存区只是对他们的索引(指针)。仓库:当执行git commit -m "提交信息"时,会生成一个commit对象,里面包含了提交者的信息、指向blob的指针,指向上一次提交的指针等,若提交的内容中有子文件夹,则会包含tree对象,tree对象中的内容为指向子文件夹中文件相对应的blob。Git三大对象

三大对象

主要说明在上一节已有描述具体看图。

Git的基本流程在工作区新建或修改了文件。git add xx.xx ;把文件提交到暂存区git commit -m "XXX" ;把暂存区的文件提交到本地仓库git log ;查看提交日志文件管理

工作区转换

文件添加

添加一个文件:git add file.c添加所有文件:git add .作用:将文件添加进暂存区,文件进入tracked状态

文件提交

单步提交:git commit -m " commit infor"一次性提交:git commit -a修改最后一次提交:git commit --amend作用:将暂存区的所有内容提交到仓库

文件删除

从工作目录和暂存区删除:git rm -f file.c

删除并提交后,该文件就不再被版本库追踪,但是版本库中仍然有这些文件的快照从暂存区中删除,工作目录中保留:git rm --cached file.c

从版本库中删除:版本回退到错误提交前的版本

撤销到暂存区:git reset --soft SHA1撤销到工作区:git reset --mixed SHA1

文件重命名:git mv old_name new_name

相当于创建(拷贝)新文件,删除旧文件

设置忽略文件
有些文件(编译的中间文件、临时文件)不想被提交。
手动创建.gitignore文件,在文件中编辑,下面是一些举例:

# 注释
*.[ao]    #忽略某种格式结尾文件例如a或o
!clib.a  #某个库文件除外,不忽略
*~        #忽略临时文件
/text     #忽略根目录下的某个文件
libs/     #忽略某个目录下的所有文件

编辑完成后提交到仓库即可完成。

差异比较

比较工作区和暂存区差异:git diff

查看尚未暂存文件有哪些新的修改

比较暂存区和版本库差异

git diff --cached [HEAD]git diff --staged SHA比较工作区和版本库差异:git diff HEAD(或者SHA1)比较两个版本之间差异:git diff SHA1 SHA2

压缩仓库:git gc

在日常运行中,git快照会占用磁盘空间,Git会在增量存储单元中存储修改,节省磁盘空间。分支管理

分支的本质是指向commit的一个指针。

一个项目在master上进行演进提交,当多人协作开发或bug修复时,需要从master上开辟一条新分支,当任务完成时,再合并到master上。
分支

创建分支:

git branch new_branch #必须要在master上git checkout –b new_branch #创建并跳转到新分支上,必须要在master上git checkout –b new_branch old_branch查看分支:git branch [-a]

切换分支:git checkout branch_name

切换分支时,工作区和暂存区的文件应全部commit,否则会切换失败分支重命名:git branch –m oldbranch newbranch #参数-M为强制转换删除分支:git branch –d branch #-D强制删除

分支合并:git merge test #合并test分支到当前分支

若合并过程中发生冲突,则应手动解决冲突,再commit提交即可。

压合合并:git merge --squash test

将一个分支上的所有历史合并为一个提交,然
后合并到另一个分支上,一般bug或新功能分支都可以使用这种方式合并。

挑选合并:

挑选一个提交,添加到当前分支git cherry-pick SHA(SHA为挑选的提交的哈希值)

分支衍合:改变当前分支的基分支。举个例子,当master分支再版本A2时创建了一个新分支dev,然后master分支继续演进到A3,dev分支也在演进,当dev分支想更新基于master分支的版本时:

git checkout dev

git rebase master

如果有冲突,则解决冲突,然后

git add .

git rebase --continue

此时dev的基分支为master的A4




永远不要衍合已经push到公共仓库的更新

分支修改储藏

保存当前分支的数据,切换到别的分支去:git stash恢复当前分支数据:
git stash apply当多次使用stash命令时,查看储藏队列git stash list,清空储藏队列git stash clear,恢复某次储藏git stash apply stash@{数字}

恢复已删除的分支提交/脱离组织的提交

分支删除的本质:分支这个指针已经删除,但commit对象还存在,只是脱离了commit链表而已,变成了悬空对象。

操作步骤

先找到脱离链表的commit:git fsck --lost-found查看是否时想要恢复的哪个commit:git show SHA衍合:git rebase SHA提交可以找回,但是分支是找不回的。远程仓库

远程仓库是指托管在因特网或其他网络中的你的项目的版本库。

本地仓库于远程仓库的通信协议有三种:

SSH协议:同时支持读和写的网络协议,Git默认使用的网络协议。Git协议:Git自带的网络协议:适用于不需要对读进行授权的大型项目。HTTP/HTTPS协议。

SSH密钥生成:

用户目录下查看有没有.ssh文件夹使用命令生成:ssh-keygen -t rsa –C "邮箱"私钥保存在用户目录下,SSH连接服务器时使用公钥放到服务器,服务器不同配置管理不一样

本地管理命令:

验证key是否添加成功:ssh –T git@github.com从远程仓库克隆:git clone repo_addr添加远程仓库:git remote add origin 仓库地址

从远程仓库拉取数据:

自动本地master分支并跟踪远程仓库master分支:git clone origin只拉取到本地,不合并:git fetch自动拉取分支更新:git pull推送到远程仓库:git push origin master在本地查看远程仓库信息:git remote -v删除本地的远程仓库的链接:git remote rm 名字例如origin远程仓库重命名:git remote rename old_name new_name

远程管理命令:

远程分支创建,将本地新建分支直接推送到远程仓库:git push origin local_branch:remote_branch

远程仓库没有这个分支,将创建这个分支origin/remote_branch并将本地分支和远程分支建立关联,以后可以直接push

基于远程分支建立一个本地关联分支:git checkout –b local_branch origin/remote_branch

建立关联后,就可以直接进行pull和push

删除远程分支:git push origin :remote_branch(远程分支名)

标签

标签是一个引用,标签对象可以指向任何对象,通常情况下,是指向一个提交(commit)。

在当前分支的末端创建轻量级标签:git tag v0.1给指定某个commit打标签: git tag V0.2 SHA删除标签:git tag -d v0.1推送标签到远程:git push origin v0.2推送所有标签:git push origin --tags

删除远程标签:

先删除本地:git tag -d v0.1在删除远程:git push origin :refs/tags/v0.2
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。
上一篇: git子模块

Tags 标签

git

扩展阅读

加个好友,技术交流

1628738909466805.jpg