大家好,我是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也可以查看不同
上面有三个查看修改状态,到底有什么区别呢?
git diff # 查看没有add时候的状态,即unstaged
git diff --cached #查看已经add时候的状态,即staged
git diff HEAD #有没有add,都可以查看,即staged&unstaged
我们先把上面的提交上去,再进行后边的教程,提交上面说的很清楚了,先add再commit
修改已经commit版本
在日常开发中我们经常会遇到这种情况,提交修改之后发现有改错的,或者遗漏的部分文件,这种情况怎么办呢?
如果在已经提交的错误版本基础上修改,有可能更乱
所以如果修改量不是特别大的情况下,我们最好的办法是退回到上一个版本
通过log --oneline我们可以查看现在提交的情况
此时有三个提交操作
情况一:
如果“修改01”已经提交了,但发现忘记了一个文件,怎么将这个文件补上去,并且还叫修改01
如果我们直接add和commit的话,这就不符合我们想要的结果
所以我们需要进行下面这种操作
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的操作返回去
git reset --hard HEAD # 意思就是返回到指针指向的位置
情况三:
如果现在修改一个文件,并对文件进行add,然后又commit,此时文件的状态变成了unmodified
这个时候如何返回操作呢?
我们先来了解一下git是如何一步步记录提交的过程的
图片来源于网络
在上图当中有一个灰色部分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
这个命令可以显示每一步提交或退回的变化
第一列是id,第二列是指针
我现在退回到创建第一个文件的时候,执行下面命令之后,此时文件夹只有一个a.py文件
哎~说好退回到未来的,我怎么退回来了,为了让大家更清晰的看到效果,反正都是找的当时的id就可以了
上面的reset是可以实现commit和commit之间穿梭
如何实现单个文件之间的穿梭,往下看
回到从前(checkout)
checkout是针对单个文件的操作
下面这个操作我指定的id就是刚刚创建文件时候的id号
重新修改a.py文件,重新commit
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上创建个仓库
2. 在本地进行连接
3. 需要进行一个登陆
4. 需要一个token
在自己github账户找到setting,setting下找Developer settings
5. 最后上传
git主干和分支的讲解下篇文章整理,下期再见!
本文章适合去理解git原理,上面是总结的git命令,我上传到我的github上了,需要的自提
https://github.com/BuLaiChuang/git-.git 链接