git学习

本文详细介绍了Git的使用,从创建版本库、添加文件、提交修改到版本回退,再到分支管理和远程仓库操作。重点阐述了分支的创建、合并与删除,以及如何与远程GitHub仓库交互。此外,还涵盖了如何处理工作区和暂存区的修改,以及撤销和删除文件的操作。
摘要由CSDN通过智能技术生成

在安装好git之后

创建Repository(版本库)

repository里面的所有文件都能够被git管理起来,文件的修改、删除都能够被git跟踪,每一个版本都会有记录。

  • 创建版本库
#新建learngit文件夹
mkdir learngit
#进入learngit文件夹
cd learngit 
#显示当前路径
pwd

得到当前路径
在这里插入图片描述

  • 通过 git init命令初始化版本库
git init

在这里插入图片描述
初始化后git仓库文件夹下,会产生一个隐藏目录/.git,用来跟踪管理版本库(不可以乱改哦),ls -ah命令可以看到;


添加文件到版本库

./learngit目录下新建readme.txt

Git is a version control system.
Git is free software.

先通过git add将文件添加到仓库

git add readme.txt
  • git add -<opt>可以简化提交过程:
    • git add -u提交所修改(modified)和被删除(deleted)文件,不包括新文件(new)
    • git add .提交新文件(new)和被修改的文件(modified),不包括被删除文件(deleted)
    • git add -A提交所有变化

使用git commit提交文件

#可以直接commit,之后再写日志内容
git commit
#也可以通过-m快速记录日志文件
git commit -m "wrote a readme.txt file"
  • 我们可以通过git status查看当前工作区状态,比如我对readme.txt进行了修改,就可以看到有哪些改动;
git status

在这里插入图片描述

  • 如果想具体查看是哪些内容进行了改动可以通过:
    git diff进行查看
    在这里插入图片描述
    得知哪个文件进行了改动,重复最开始的两步:
git add readme.txt
git commit

在这里插入图片描述
如此时再进行git status,是没有修改的,而且工作目录为空的。
在这里插入图片描述

如果我们想要全部添加进版本库,但是要排除某几个文件该怎么办呢?
git add .
git reset -- <filename>

这里顺便讲一下git add ., git add - u , git add -A的区别:
git add .:会将工作时的变化提交到暂存区,包括文件修改(modified)以及新文件(untracked),但不包括删除文件(deleted);
git add -u:仅监控已经被add的文件,即tracked file,将被修改的文件modified包括 被删除的文件(deleted) 提交到暂存区,不会提交未被监控的新文件(untracked );
git add -A:提交所有变化,是上述两种功能的集合;

git reset -- <filename>:将加入到暂存区的内容恢复到untracked状态;


时间轴线

通过各种命令操作使我们在时间线上进行的各种操作进行回退或恢复;

版本回退

我们重新修改readme.txt重新提交一版;

Git is a distributed version control system.
Git is free software distributed under the GPL.

在这里插入图片描述

  • 通过git log可以查看由近到远的提交日志
    在这里插入图片描述
    git log --pretty=oneline加上这个参数会简化每条说明至一行:
    在这里插入图片描述
    每一个日志前面的一大串数字都是commit id版本号,为了方便多人提交这是一个通过SHA1计算出来的庞大十六进制数字,以防冲突;
  • git中,使用HEAD指针指向当前版本,如果想进行回退指向上一版本使用HEAD^,上上版本是HEAD^^,往上100版本是HEAD~100
    此时回退一个版本,使用git reset:
git reset --hard HEAD^

在这里插入图片描述
版本回退后,readme.txt内容也恢复到了上一版本:
在这里插入图片描述
此时进行git log查看版本信息已经只有当前版本与更早的了,没有回退之前的版本了:
在这里插入图片描述
此时如果我们还想恢复的话,可以通过指定版本号,并不需要完整的版本号,只需要前几位便可恢复:
git reset --hard 78e02

使用git reflog可以查看之前进行所有的命令:
在这里插入图片描述


修改撤销

当你失误不小心添加了一些错误的内容:
在这里插入图片描述
你想丢弃工作区的修改,这是可以通过:git checkout -- file-- 十分重要不然语义变成“切换到另一个分支”;

git checkout -- readme.txt

将readme.txt文件在工作区的修改全部撤销,这里有两种情况:

  1. readme.txt修改之后还没有放入暂存区,撤销修改就回到和版本库一样的状态;
  2. readme.txt已经添加暂存区,又做了修改,这样撤销修改就回到添加到暂存区后的状态;
这里说一下工作区暂存区的概念:
  • 工作区(Working Directory)
    即电脑里能看到的目录,比如learngit文件夹就是一个工作区;

  • 暂存区(Stage)
    工作区里有一个隐藏目录.git,这个是git的版本库,其中就有暂存区(stage),以及Git为我们自动创建的第一个分支master(指向master的第一个指针叫head)。
    在这里插入图片描述

    当我们将文件往Git版本库里添加的时候,分两步执行:

    1. git add将文件添加进去,这个时候就是将文件修改添加到暂存区;
    2. git commit提交更改,这就是将暂存区的内容提交当当前分支;
删除文件

linux命令先删除文件rm test.txt,这样操作并不会影响已提交版本库中的文件,如果此时想要恢复通过check out -- file即可;
接下来要在git中确认删除文件:

  1. git rm file
  2. git commit

这样操作就会将版本库中的文件给删除掉,无法恢复!!!慎重!


远程仓库

使用Github

添加远程仓库

通过SSH将本地Git仓库与远程GitHub仓库建立连接:

  1. 创建SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
  1. 在用户主目录下(/root),查看.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个是SSh Key的秘钥对,id_rsa为私钥绝不能泄露,id_rsa.pub是公钥,可以放心告诉别人;
  2. 将公钥复制进github.com账户里面的SSH页面:
    在这里插入图片描述
    在这里插入图片描述
  3. 新建远程仓库learngit
    在这里插入图片描述
  4. 本地仓库关联远程仓库
git remote add origin git@github.com:snowCreaml/learngit.git

这里的orgin远程仓库默认的名字(这样一看这个名字就知道是远程仓库);

git push -u origin master

将本地库所有内容推送到远程库上,使用git push默认将本地当前分支master推送到远程了,-u是将本地master分支关联至远程的master分支,以后的推送就不需要了可以直接使用git push origin master
在这里插入图片描述
在我们推送之后,可以看到Github中的远程库已经有了我们本地库的内容!
在这里插入图片描述
第一次使用SSH连接Github可以会有警告,回复yes,会将Github的key加入known hosts中,以后就不会有警告了;

解绑远程库

git remote -v可以查看到远程库的信息;
在这里插入图片描述
使用git remote rm orgin 可删除orgin库,这里的“删除”实际上是解绑了本地与远程的绑定关系,远程仓库的存在并不受影响,如果想真正的删除远程库需要到Github中进行删除操作;

克隆远程库

使用命令git clone克隆远程库getskills至本地库:

git clone git@github.com:snowCreaml/gitskills.git

在这里插入图片描述


分支管理

分支创建与合并

git创建分支使用git branch <name>,科学切换分支使用git switch <name>;

git branch dev
git switch dev

键入git branch能够查看当前分支
在这里插入图片描述
上述创建并切换分支也可以简化为:

git switch -c  dev

老式语言也可以通过git checkout <name>切换分支,不过与我们上文所说的撤销修改git checkout -- <file>有些语义歧义;
我们在dev分支对readme.txt进行修改,然后进行提交;

git add readme.txt
git commit -m "branch test"
git branch master

之后我们再切换回master分支,会发现我们的修改在master下并看不到;
我们想将dev分支的工作成果合并到master分支上,使用git merge dev

git merge dev

在这里插入图片描述
此处提示中的Fast-forward信息,是"快进模式"。将master指针指向dev指向的节点,合并速度非常快,后续还会有其他合并方式讲解;
合并后在master分支下就可以看到dev分支下进行的修改了,此时我们可以将dev分支删除掉:

git branch -d dev

在这里插入图片描述
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

原理

git的分支实际上是通过指针进行实现的,主分支master是一条时间线,每一次提交都是一个节点版本,master便向前进一步,HEAD指向master即也指向当前分支;
在这里插入图片描述
当我们创建了一个新分支dev后,切换指针HEAD指向dev,从此再进行提交就是对dev分支进行修改了;
在这里插入图片描述
在这里插入图片描述
此时我们进行合并,就是将master指针指向dev,便完成了合并,工作区内容没有改变;
在这里插入图片描述
完成合并后,我们想删除dev分支,便又回到了原始的状态;
在这里插入图片描述

设置远程分支

1、

# Set upstream when pushing to remote
git push -u origin <branchname>

2、

# Set upstream without pushing it
# with option -u / --set-upstream-to
git branch -u origin/<branchname>
git branch --set-upstream-to=origin/<branchname>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值