前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用git上传我们的故事

使用git上传我们的故事

作者头像
木野归郎
发布2021-12-18 11:38:34
2910
发布2021-12-18 11:38:34
举报
文章被收录于专栏:share ai happiness

大家好,我是OnlyCoding

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

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

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

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

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

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

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

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

英文翻译

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的意思是显示当前目录

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

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

添加文件(add)

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

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

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

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

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

别忘记后边有个小点

提交(commit)

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

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

修改记录log

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

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

添加一行语句:username=zhangsan

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

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

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

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

查看修改状态 unstaged

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

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

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

查看修改状态 staged (cached)

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

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

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

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

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

代码语言:javascript
复制
git diff   # 查看没有add时候的状态,即unstaged
git diff --cached #查看已经add时候的状态,即staged
git diff HEAD #有没有add,都可以查看,即staged&unstaged

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

修改已经commit版本

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

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

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

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

此时有三个提交操作

情况一:

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

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

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

代码语言:javascript
复制
git commit --amend --no-edit

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

情况二:

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

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

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

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

怎么返回去呢?

git reset a.py

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

还有一种办法

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

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

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

代码语言:javascript
复制
git reset --hard HEAD  # 意思就是返回到指针指向的位置

情况三:

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

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

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

图片来源于网络

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

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

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

可以实现的命令比较多

代码语言:javascript
复制
回到上一个版本:git reset --hard HEAD^
回到上上个版本:git reset --hard HEAD^^

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

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

代码语言:javascript
复制
git reset --hard 3ccb20c

情况四:

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

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

代码语言:javascript
复制
git reflog

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

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

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

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

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

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

回到从前(checkout)

checkout是针对单个文件的操作

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

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

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

命令总结:

创建版本库

代码语言:javascript
复制
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱名"
git init

添加文件

代码语言:javascript
复制
git add .  (这是添加文件夹下所有的文件)
git add 单个或多个文件名称

提交文件

代码语言:javascript
复制
git commit -m "提交文件描述"

补充两个:

代码语言:javascript
复制
git log --oneline  # 可以查看已经提交后的操作对应的id
git status -s  # 查看文件当前状态

查看修改记录

代码语言:javascript
复制
git log

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

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

代码语言:javascript
复制
git diff   # 查看没有add时候的状态,即unstaged状态
git diff --cached #查看已经add时候的状态,即staged状态
git diff HEAD #有没有add,都可以查看,即staged & unstaged状态都可以

修改操作,分这几种情况

代码语言:javascript
复制
git log --oneline 
git status -s

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

代码语言:javascript
复制
 git commit --amend --no-edit

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

代码语言:javascript
复制
 git reset 当前文件名称

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

代码语言:javascript
复制
    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号

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

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

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

代码语言:javascript
复制
 git checkout XXXX -- 文件名称  # 想要返回的那个commit对应的id号

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

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

1. 在github上创建个仓库

2. 在本地进行连接

3. 需要进行一个登陆

4. 需要一个token

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

5. 最后上传

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

本文章适合去理解git原理,上面是总结的git命令,我上传到我的github上了,需要的自提

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OnlyCoding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档