使用git上传我们的故事

本文详细介绍了Git的基本操作,包括创建版本库、添加和提交文件、查看修改状态、理解untracked、unmodified、modified和staged的区别、使用git diff查看文件差异、以及如何退回和穿梭于不同版本。此外,还涵盖了git commit --amend、git reset等实用技巧,帮助读者深入理解Git的工作流程。
摘要由CSDN通过智能技术生成

大家好,我是OnlyCoding

今天是我们在一起的第n个100天

我想可以开始上传我们之前的故事了

还记得上上期那篇文章,我整理了21个关于树的算法题

期待这周末和你相见,一起讨论

可是我发现我和你还差一些距离,我想把我想告诉你的上传到git上,可是我还不会使用

原谅我之前没有努力学习,这一次,我想好好做个总结

文末有惊喜~c769d96448b64bf2e4ea3f3b2067369a.png

前两天写了好多树的代码,想上传到git上面,但好多命令和操作差不多忘了

关于为什么使用git?和git的安装不在这篇文章做介绍

0b21cbaf8d45b3b571ca9b7bd061bb3b.png

英文翻译

untracked:未跟踪,此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged

unmodified:未更改的,文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

modified:更改的,仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

创建版本库(init)

首先我们先要确定需要把哪个文件夹里边的东西上传到git上进行管理

比如我们现在需要管理firstRepository这个文件夹下面的文件和代码,我们需要使用git bash) (mac 的 git bash)

pwd的意思是显示当前目录

89598f436eebe1aca4336d680f02ecc1.png

为了记录每次进行操作人的信息,我们需要在git上添加用户名和email

76e54382ae7658e9a4b9514c4bd6ab17.png

然后我们就可以在这个文件夹中建立git,进行文件管理了

5e53f9417e4b10c41bcd17823b2f5b58.png

添加文件(add)

我们可以在命令行中执行ls命令,就可以看到文件夹中所有的文件,但是如果你的电脑没有把隐藏文件设置成可见,可能就看不见,所以使用ls -a命令就可以看见

faff9444fd3fd4195989c2525e86a506.png

现在我们手动创建一个a.py文件

现在可以使用status来查看版本库的状态

1d432d93c3788548397fb3545d5335bf.png

此时此刻a.py这个文件还没有被放入版本库中(unstaged),使用add把这个文件添加进版本库(staged)中

059053e9360e50236fff98d35148ba33.png

如想一次性添加文件夹下所有文件,可以使用git add .

别忘记后边有个小点

提交(commit)

-m后面是写提交注释信息的

8b0d227b1e82ea3b3a3723565a16d628.png

在git中,每提交(commit)一次修改,都会被单独保存起来,每个commit记录了整个修改记录

修改记录log

使用git log可以查看到版本库的信息,比如操作者的名字和email

e7e22b287888513a28fa9e2f58f601d8.png

现在我们对a.py这个文件进行修改

添加一行语句:username=zhangsan

ad0fbf09634849790fcccc3e23a49dfd.png

此时我们通过status查看修改后没有被提交的信息

1340a674f0bf958e549a68d038ec7a7e.png

然后我们再把这次修改的文件添加(add)到可被提交(commit)的状态,然后再提交(commit)

62551f0d322e1f99d771c4f91440caff.png

通过log查看,就可以看到截止到现在两个操作:create a.py和添加内容01

而且还能看到两次commit修改的作者是谁

2443d84d9041a207aa286faa73f1e1b1.png

查看修改状态  unstaged

我们现在再对文件进行修改,将username改为liming,再添加age=22

761c1628be7b4c86572be3d444a09e78.png

如果我们想要查看这次还没有add(unstaged)的修改部分和上个已经commit的文件有什么不一样,可以使用git diff

dd29534d76331043d40e39041664c22a.png

红色字体前面是减号(-),绿色字体前面是加号(+),减号就表示删除了什么,加号就表示添加了什么

查看修改状态  staged (cached)

如果现在已经add了,文件状态变成了“可提交状态”(staged),可以在diff后边添加--cached来查看修改

62b75cdcdb511f9bfa40d988f798d239.png

查看修改状态  staged & unstaged (HEAD)

我现在再添加一句:sex=男

diff后边加HEAD也可以查看不同

5d809b915fd3621118db811bf5887d7b.png

上面有三个查看修改状态,到底有什么区别呢?

git diff   # 查看没有add时候的状态,即unstaged
git diff --cached #查看已经add时候的状态,即staged
git diff HEAD #有没有add,都可以查看,即staged&unstaged

我们先把上面的提交上去,再进行后边的教程,提交上面说的很清楚了,先add再commit

修改已经commit版本

在日常开发中我们经常会遇到这种情况,提交修改之后发现有改错的,或者遗漏的部分文件,这种情况怎么办呢?

如果在已经提交的错误版本基础上修改,有可能更乱

所以如果修改量不是特别大的情况下,我们最好的办法是退回到上一个版本

通过log --oneline我们可以查看现在提交的情况

eb76f292f232e7c28893a739fb210476.png

此时有三个提交操作

情况一:

如果“修改01”已经提交了,但发现忘记了一个文件,怎么将这个文件补上去,并且还叫修改01

如果我们直接add和commit的话,这就不符合我们想要的结果 

所以我们需要进行下面这种操作

git commit --amend --no-edit

0225366bba07c0f048ba9bb79830cdd9.png

上面补交之后,修改01对应的id发生了变化,其它没有变化

情况二:

如果我们对当前的文件进行了修改,然后我们add之后,突然发现还有一些文件没有修改,我们希望退回到add之前的状态

就是从staged状态退回到modified状态

比如我们在a.py文件中添加:happy=01

4718033883f3ff1bfc619ac12300d2b0.png

输入下面命令,可以看到a.py状态是从modified状态到了staged状态当中

a76706004ac7332bd6d4d66ba1ee0390.png

怎么返回去呢?

git reset a.py

会发现颜色变成了红色,说明退回去了

cb8bba7d1bd6895a43dd7d0e62f3924b.png

还有一种办法25ddde0610de1c63c30eaa40852329a2.png

这里先查看一下当前的状态,然后对修改后的文件只进行add操作

740ca37702f405b14626a90245cd29d3.png

此时是什么状态呢?下面这种状态,就是HEAD这个指针没有向后移动

所以我们可以使用这个命令将刚刚add的操作返回去 

git reset --hard HEAD  # 意思就是返回到指针指向的位置

d739bf941ffbd4e3736f6ddfdb93b9f1.png

情况三:

如果现在修改一个文件,并对文件进行add,然后又commit,此时文件的状态变成了unmodified

这个时候如何返回操作呢?

我们先来了解一下git是如何一步步记录提交的过程的

f4ab22375ea61878bf0ca6fdd391dde9.png

图片来源于网络

在上图当中有一个灰色部分HEAD,相当于指针,绿色部分是每次提交之后的版本,指针指向哪,就回到了哪个版本

可以使用git status -s查看一下状态

如果我们想回到上一个版本或者上上个版本,更或者是前100个版本,该怎么操作呢?

可以实现的命令比较多

回到上一个版本:git reset --hard HEAD^
回到上上个版本:git reset --hard HEAD^^


回到上上个版本:git reset --hard HEAD~2
回到前100个版本:git reset --hard HEAD~100

或者使用id号码进行退回,这里需要查看对应版本的id号码

git reset --hard 3ccb20c

情况四:

现在退回到过去的版本了,发现过去版本更乱,如何回到未来的某个版本呢?

我们如何查看之后的版本id呢?

git reflog

这个命令可以显示每一步提交或退回的变化

541df406c7cc9abc7789452103d5bdaa.png

第一列是id,第二列是指针

我现在退回到创建第一个文件的时候,执行下面命令之后,此时文件夹只有一个a.py文件

d6a7130d2ad8c140d3fe93b2809735a5.png

哎~说好退回到未来的,我怎么退回来了,为了让大家更清晰的看到效果,反正都是找的当时的id就可以了

上面的reset是可以实现commit和commit之间穿梭

如何实现单个文件之间的穿梭,往下看

回到从前(checkout)

checkout是针对单个文件的操作

下面这个操作我指定的id就是刚刚创建文件时候的id号

f4bc7af32deb8fcff937d344b21437c3.png

重新修改a.py文件,重新commit

eb62af92bc5025912b24e5d468f0d047.png

checkout不像reset,只是针对单个文件退回到过去,然后修改,改写未来

命令总结:

创建版本库

git config --global user.name "你的用户名"
git config --global user.email "你的邮箱名"
git init

添加文件

git add .  (这是添加文件夹下所有的文件)
git add 单个或多个文件名称

提交文件

git commit -m "提交文件描述"

补充两个:

git log --oneline  # 可以查看已经提交后的操作对应的id
git status -s  # 查看文件当前状态

查看修改记录

git log

查看修改文件并提交后的状态,分为三类:

这里的操作只是用于对比修改前后有哪些不一样

git diff   # 查看没有add时候的状态,即unstaged状态
git diff --cached #查看已经add时候的状态,即staged状态
git diff HEAD #有没有add,都可以查看,即staged & unstaged状态都可以

修改操作,分这几种情况

git log --oneline 
git status -s

情况一:修改后的文件已经commit了,发现还有个文件没有提交上去(这里说的是文件,情况有很多,比如:提交后下一秒又加了一行代码),如果重新提交会有一次新的操作,怎么在刚刚提交的版本上把文件补上呢?

git commit --amend --no-edit

情况二:如果只是对修改后的文件进行了add,发现还有个文件没有提交上去,如何退回到add之前的状态呢?

git reset 当前文件名称

情况三:把修改后的文件已经add和commit操作了,如何返回上一个版本或者指定版本

git reset --hard HEAD^  #回到上一个版本
    git reset --hard HEAD^^  #回到上上个版本
   
    git reset --hard HEAD~2  #回到上上个版本
    git reset --hard HEAD~100  #回到前100个版本


    git reset --hard XXXX  #XXXX表示commit对应版本的id号

情况四:现在退回到过去的版本了,发现过去版本更乱,如何回到未来的某个版本呢?

git reflog  #退回去之前某个版本之后,查看之后所有版本对应的id
git reset --hard XXXX  # 想要返回的那个commit对应的id号

对单个文件进行操作--返回指定版本

git checkout XXXX -- 文件名称  # 想要返回的那个commit对应的id号

如何将本地代码上传到github上进行管理呢?

这里默认大家已经注册过账号和设置过ssh免密登陆了

1. 在github上创建个仓库

26cfe934dedf500881b0fec3b323e151.png

760e349806a005ab6a9147c962cd5d3c.png

2. 在本地进行连接

31a14d847bf7ed9634ae5ce73d43f318.png

3. 需要进行一个登陆

dacd15ae35d5647d4b41a8516fc8e6ab.png

4. 需要一个token

在自己github账户找到setting,setting下找Developer settings

35e042416bff054b8e7e023555073496.png

06890ebae91a7a5db8220599b479bcf4.png

5. 最后上传

51be4f0dddd4378682a5acfb5951941c.png

94228d956dfb137ec39aa7db7af04d1b.png

git主干和分支的讲解下篇文章整理,下期再见!76cf29827216a060cd383f3c7fe15f76.png

本文章适合去理解git原理,如果想要git命令可以后台留言,整理不易,喜欢的可以点赞支持

上面是总结的git命令,我上传到我的github上了,需要的自提

https://github.com/BuLaiChuang/git-.git

链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值