前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >git基础知识

git基础知识

作者头像
保持热爱奔赴山海
发布2019-09-18 15:12:37
3610
发布2019-09-18 15:12:37
举报
文章被收录于专栏:饮水机管理员饮水机管理员

本文没啥难度,基本上是我照着廖雪峰的博客敲的代码,权当做篇学习笔记。

git基础知识

git diff example.txt

git add example.txt

git commit -m 'addby XXXX'

git status

git log[--pretty=online]

windows上安装git客户端,到官网下载即可。

安装完成后,在开始--> GitBash ,输入下面的内容:

git config --global user.name'lirl'

git config --global user.email'lirulei90@126.com'

mkdir testgit

cd testgit/

git init

Initialized empty Gitrepository in D:/testgit/.git/

编辑一个readme.txt,放到D:/testgit/目录下

wKioL1ePpPiAIcm5AAANFuo1Rjk596.png
wKioL1ePpPiAIcm5AAANFuo1Rjk596.png

git add readme.txt

git commit -m 'add one file'

如下图:

wKiom1ePpPigROW1AAAODR4SOVg706.png
wKiom1ePpPigROW1AAAODR4SOVg706.png

然后,随便修改下这个readme.txt,

wKiom1ePpPiwqdiBAAAUbOzH1aM125.png
wKiom1ePpPiwqdiBAAAUbOzH1aM125.png

然后再次执行git status

wKioL1ePpPmTEFOjAAAsducXdY0893.png
wKioL1ePpPmTEFOjAAAsducXdY0893.png

上图最后一行的提示告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

执行git diff readme.txt

wKiom1ePpT2TBcrrAAAb-lLQPsg786.png
wKiom1ePpT2TBcrrAAAb-lLQPsg786.png

上图的绿色的就是现在的文件内容。

知道哪里修改后,我们心里有数后,就可以提交了。

git add readme.txt

git commit -m 'third'

git status

wKioL1ePpT2z2XJqAAAYWXeK7OM396.png
wKioL1ePpT2z2XJqAAAYWXeK7OM396.png
wKiom1ePpT3T_uygAAAyJvLBDVE698.png
wKiom1ePpT3T_uygAAAyJvLBDVE698.png

上图的git告诉我们,当前没有需要提交的修改,而且工作目录是干净的。

然后我们执行git log 看下修改的历史记录。

wKioL1ePpT7R15fGAAAt59xNoHs832.png
wKioL1ePpT7R15fGAAAt59xNoHs832.png

git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是third,上一次是add distributed,最早的一次是wrote a readme file。

如果觉得输出界面太杂乱,可以加上--pretty=oneline参数,如下图:

wKioL1ePpWHBUK-NAAAf2P4ezHw008.png
wKioL1ePpWHBUK-NAAAf2P4ezHw008.png

前半截的十六进制字符串是commit id,后面的是commit时候写的注释。

然后,我们再演示一下回滚操作,

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

如下表示回到上一版本:

git reset --hard HEAD^

wKiom1ePpZDCprnXAAAQPG7KuE4121.png
wKiom1ePpZDCprnXAAAQPG7KuE4121.png

回滚完成后,可以直接执行cat命令查看readme.txt的文件内容,如下图,文件内容已经回到上一版本了:

wKiom1ePpZGCFoeDAAAHm3A9U98815.png
wKiom1ePpZGCFoeDAAAHm3A9U98815.png

git log 再次看下有哪些版本

wKioL1ePpZGwIOfVAAAnNxH70eA635.png
wKioL1ePpZGwIOfVAAAnNxH70eA635.png

最新的那个版本'third' 已经看不到了!想再回去已经回不去了,肿么办?

办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个commit id是dcb953c4e8...,于是就可以指定回到未来的某个版本。

如下执行:

git reset --hard dcb953c4e8c  # 版本号没必要写全,前几位就可以了,Git会自动去找

git log 再次查看如下图,发现刚才的哪个版本已经回来了:

wKiom1ePpbvi-Vp8AAApe16E1WA983.png
wKiom1ePpbvi-Vp8AAApe16E1WA983.png

cat readme.txt 可以发现文件内容已经恢复了。

wKioL1ePpbuRKw3CAAAPrk62rAs334.png
wKioL1ePpbuRKw3CAAAPrk62rAs334.png

git reflog   # 可以查看所有分支的所有操作记录。包括(包括commit和reset的操作),包括已经被删除的commit记录。【常用于重返未来】

wKiom1ePpdvQUR_fAAAn08Ne86w846.png
wKiom1ePpdvQUR_fAAAn08Ne86w846.png

可以找到以前commit的记录,就可以回去了。

git reset --hard 760aa48  会退到这个版本

cat readme.txt

wKioL1ePpdvCWMGsAAAgcCCVjfM851.png
wKioL1ePpdvCWMGsAAAgcCCVjfM851.png

linux上安装git客户端(本地模式)

yum install git -y

其他操作和winrdows上的一样。

首先添加个git用户名和邮箱,多用户的话,建议下面方式

gitconfig --localuser.name 'lirl'

gitconfig --localuser.email 'lirulei90@126.com'

假如,原有一个文件提交过的readme.txt。后来做了些修改,并新添加一个issue的文件。

然后执行git status,如下图:

wKioL1ePpgXwm_M3AABIp3C3NU8958.png
wKioL1ePpgXwm_M3AABIp3C3NU8958.png

git add readme.txt

git add issue

git status

wKiom1ePpiWhDBF2AAAe4sfavEQ119.png
wKiom1ePpiWhDBF2AAAe4sfavEQ119.png

git commit -m 'v4'  提交

git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

git status

wKioL1ePpkHSRNHFAAAmypTs7Vw999.png
wKioL1ePpkHSRNHFAAAmypTs7Vw999.png
wKiom1ePpkKStYWSAAAgdt8Ex78875.png
wKiom1ePpkKStYWSAAAgdt8Ex78875.png

git的工作流程如下:

wKioL1ePpmSyv7f4AADsxBrgbpw340.png
wKioL1ePpmSyv7f4AADsxBrgbpw340.png
wKiom1ePpmXQ16NaAADrHYcF8Bo539.png
wKiom1ePpmXQ16NaAADrHYcF8Bo539.png

管理修改

第一次修改 -> git add -> 第二次修改 -> git commit

你看,我们前面讲了,Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

撤销修改

假如文件错误加了一行"Fuck stupid boss"则恢复的方法如下:

git checkout -- xx.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

如果文件还没有git add xx.txt ,则checkout操作能回到修改前的版本(回到git commit版本)

如果git add xx.txt已经执行过来,则即便checkout也只能回到添加到暂存区的版本(回到git add版本)。回到老版本需要如下操作:

echo 'stupid boss' >> issue  模拟文件被错误的修改了

git add issue

wKioL1ePppTxN7clAAAajyB2u9U207.png
wKioL1ePppTxN7clAAAajyB2u9U207.png

git reset HEAD issue

wKioL1ePppSgm-iPAAA-yGshht0855.png
wKioL1ePppSgm-iPAAA-yGshht0855.png

git status

wKiom1ePppSiFN9XAAA-yGshht0670.png
wKiom1ePppSiFN9XAAA-yGshht0670.png

git checkout -- issue

cat issue

wKiom1ePptnAY0ocAAAa2Mhapuc682.png
wKiom1ePptnAY0ocAAAa2Mhapuc682.png

git status

wKioL1ePpsTg9gwgAAASKMdghgU408.png
wKioL1ePpsTg9gwgAAASKMdghgU408.png

cat issue

wKiom1ePpsSw_4xXAAASWYq5rN4355.png
wKiom1ePpsSw_4xXAAASWYq5rN4355.png

小结

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file_name,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

删除文件

git add passwd

git commit -m 'add a passwd'

git status

wKioL1ePpvyBkhScAAAximTMNqU602.png
wKioL1ePpvyBkhScAAAximTMNqU602.png

rm -f passwd  模拟删除操作

git status

wKiom1ePpvzTTXKuAAA8HLBl4cI379.png
wKiom1ePpvzTTXKuAAA8HLBl4cI379.png

可以看到git发现passwd这个文件被删除了。同时给出了提示可以执行git rm 或者git checkout

假如我们确实是要删除,则执行下述操作:

git rm passwd

git status

git commit -m 'rm passwd'

git status

wKioL1ePpx6DiRJZAABJlIjh5RA853.png
wKioL1ePpx6DiRJZAABJlIjh5RA853.png

假如我们要恢复文件,则执行下述操作:

git checkout -- passwd 即可完成文件的恢复

wKiom1ePpx_QsrWpAAAc7Tdl3qk034.png
wKiom1ePpx_QsrWpAAAc7Tdl3qk034.png

git checkout其实是用版本库里的版本替换了工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-07-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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