设为首页 收藏本站
查看: 1794|回复: 0

[经验分享] Git本地仓库

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2018-1-14 18:11:02 | 显示全部楼层 |阅读模式
  原文:http://www.cnblogs.com/wilber2013/p/4189920.html

Git基本概念
  在Git中,我们将需要进行版本控制的文件目录叫做一个仓库(repository),每个仓库可以简单理解成一个目录,这个目录里面的所有文件都通过Git来实现版本管理,Git都能跟踪并记录在该目录中发生的所有更新。
  现在我们已经知道什么是repository(缩写repo)了,假如我们现在建立一个仓库(repo),那么在建立仓库的这个目录中有一个“.git”的文件夹。这个文件夹非常重要,所有的版本信息,更新记录,以及Git进行仓库管理的相关信息全部保存在这个文件夹里面。所以,不要修改/删除其中的文件,以免造成数据的丢失。
  进一步的讲解请参考下面一张图,大概展示出了我们需要了解的基本知识。

  根据上面的图片,下面给出了每个部分的简要说明:


  • Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
  • WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
  • .git:存放Git管理信息的目录,初始化仓库的时候自动创建。
  • Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
  • Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。
  • Stash:是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。
  有了上面概念的了解,下面就开始在本地repo上进行Git操作了。

创建仓库
  通过“Git Bash”命令行窗口进入到想要建立版本仓库的目录,通过“git init”就可以轻松的建立一个仓库。



  这时,我们的仓库中会自动的产生一个“.git”文件夹,这个就是我们前面提到的Git管理信息的目录。

添加
  现在我们在仓库中新建一个“test.txt”的文本文件,内容如下。
  

123  
123
  


  通过"git status"可以查看WorkSpace的状态,看到输出显示"test.txt"没有被Git跟踪,并且提示我们可以使用"git add <file>..."把该文件添加到待提交区(暂存区)。
  注意,如果添加到暂存区,这时的更新只是在WorkSpace中。

  使用"git add test.txt"或者"git add .",然后继续查看WorkSpace的状态。这时发现文件已经被放到暂存区。
  这时的更新已经从WorkSpace保存到Stage中。

  最后,我们就可以通过“git commit -m”来提交更新了。-m后面跟的是对commit的描述(message)。
  这时的更新已经从Stage保存到了Local Repo中。

  通过上面的操作,文件"test.txt"就成功的被添加到了仓库中。

更新
  假设现在需要对"test.txt"进行更新,修改文件后,查看WorkSpace的状态,会发现提示文件有更新,但是更新只是在WorkSpace中,没有到暂存区中。
  

莫语常言道知足,万事至终总是空。  
理想现实一线隔,心无旁骛脚踏实。
  
谁无暴风劲雨时,守得云开见月明。
  
花开复见却飘零,残憾莫使今生留。
  


  同样,通过add、commit的操作,我们可以把文件的更新先放到暂存区,然后从暂存区提交到repo中。

  注意,只有被add到暂存区的更新才会被提交进入repo。提交前,如果对WorkSpace的文件进行修改,而没有被添加到暂存区,那么提交进repo中的只是暂存区的更新,WorkSpace修改的部分不会提交进repo中的。

git diff
  "git diff"是个很有用,而且会经常用到的命令,用于显示WorkSpace中的文件和暂存区文件的差异。先将我们之前的test.txt文件中的内容改成纯数字然后提交到repo中,中文字符运行该命令会显示乱码。
  

123  
123
  

  接下来修改成下面内容,我们通过"git diff"可以查看WorkSpace和Stage的diff情况,当我们把更新add到Stage中,diff就不会有任何输出了。
  

123  
123
  

  
456
  
456
  


  当然,我们也可以把WorkSpace中的状态和repo中的状态进行diff,命令如下。
  

git diff HEAD~n  


撤销更新
  根据前面对基本概念的了解,更新可能存在三个地方,WorkSpace中,Stage中和repo中。下面就分别介绍一下怎么撤销这些更新。

撤销WorkSpace中的更新
  接着上面的例子,先将test.txt中的文本设置如下内容,并提交。
  

abc  
abc
  

  然后将test.txt中的内容进行修改:
  

abc  
123
  
bca
  
321
  


  我们可以使用"git checkout --<file>..."来撤销WorkSpace中的更新。执行test.txt中的文本会变成两行"abc"。

  注意:使用这种方法撤销更新的时候一定要慎重,因为通过这种方式撤销后,更新将没有办法再找回。

撤销Stage中的更新
  由于上个步骤,我们将test.txt修改撤销了。这里再次修改为下面内容,并且使用了"git add"把这个更新提交到了暂存区。这时,"git status"的输出中提示我们可以通过"git reset HEAD <file>..."把暂存区的更新移出到WorkSpace中。
  如果想继续撤销WorkSpace中的更新,请参考上面一步。
  

abc  
123
  
cba
  
321
  



撤销repo中的更新
  介绍撤销repo中的更新之前,我们先看一下"git log"这个命令,通过这个命令我们可以查看commit的历史记录。

  撤销提交有两种方式:使用HEAD指针和使用commit>
  在Git中,有一个HEAD指针指向当前分支中最新的提交。当前版本,我们使用"HEAD^",那么再钱一个版本可以使用"HEAD^^",如果想回退到更早的提交,可以使用"HEAD~n"。(也就是,HEAD^=HEAD~1,HEAD^^=HEAD~2)
  

git rest --hard HEAD^  
git rest --hard HEAD~1
  
git rest --c2760c5512bc67a8b990c1da508d40cca623f23
  


  再次查看,发现最新的提交已经被撤销了,查看test.txt中的文件,发现内容又变成两行"abc"文本。
  那么问题就来了,我现在又想恢复被撤销的提交,当然Git是支持这样的操作。
  下面来看看"git reflog"这个命令。"git log"只是包括了当前分支中的commit记录,而"git reflog"中会记录这个仓库中所有的分支的所有更新记录,包括已经撤销的更新。

  有了这个,我们就可以恢复撤销操作。
  

git reset --hard HEAD@{1}  
git reset --hard f752570
  

  再次查看,发现我们撤销的内容已经回来了。

  --hard和--soft
  前面在使用reset来撤销更新的时候,我们都是使用的"--head"选项,其实与之对应的还有一个"--soft"选项,区别如下:
  --head:撤销并删除相应的更新
  --soft:撤销相应的更新,把这些更新的内容放到Stage中

删除文件
  在Git中,如果我们要删除一个文件,可以使用下面的命令,"git rm"相比"rm"只是多了一步,把这次删除的更新发到Stage中。
  

rm <file>  

  

git rm <file>  


总结

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435068-1-1.html 上篇帖子: 我所记录的git命令(非常实用) 下篇帖子: 妈妈再也不用担心我使用git了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表