git版本控制系统入门

git版本控制系统入门

  • 花了小半个月的时间学习的,下面根据我用的时候遇到的问题来一步步探索这个软件。git官网的教程挺好的,我就是看的这个,下面都是我的总结,作为大家的参考

    什么是git?

    • git就是一个软件而已,他的功能可以用一个例子来说,当用word写一个小论文的时候,比如周四你写完了,把他保存。周五你打算检查一遍上交,发现内容还可以改改,你又花了一天时间改。到了周六,你打算上交,突然又觉得还是周四写的好,你想改回来,怎么办?

    • 解决办法就是,把每一次写完的版本分别用一个文件备份保存起来。可以改一次分别保存一次,分别为A.doc ,B.doc代表周四和周五写的。这样就可以比较了啊

    • git的功能:就是它会自动保存不同的版本,保存在一个仓库里,以后想改到哪个版本,只需要输入命令就会改回来

    软件运行的环境

    可以通过官网下载他的软件https://git-scm.com/其实它是一个linux系统上的软件,windows版的会弹出一个Linux的虚拟命令行界面,再这个界面里面模仿linux操作,就和windows的DOS命令一样。不想安装的话推荐一个网站:https://learngitbranching.js.org/?locale=zh_CN

    命令行的格式是:$: commd [-o|--option] param1 param2...

    • 举个例子git commit -a:git就是命令(commd),commit就是参数(param),-a就是选项(-o)
    • 要知道移动文件的命令

    使用

    1. 他是以文件夹为单位运行的,这个文件夹也叫做工作目录安装完以后,在一个文件夹下鼠标单击右键,就会出现一个类似dos的黑框

    在这里插入图片描述

    用这个黑框来操作这个文件夹,输入什么命令,怎么创建一会再说。

    1. 假设已经已经在这个文件夹下创建了这个 git仓库,这个文件夹内就会出现这个一.git命名的文件夹,这个文件夹就是git仓库;
      在这里插入图片描述

    这个文件夹就被.git文件夹管了,.git就是这个仓库,仓库里面保存着工作目录中的所有文件的不同版本,这些文件可以属于git仓库管,也可以用命令把他排除在外。

名词解释

一个版本仓库的组成

  1. .git文件夹:存放所有的版本;

    1. 对象:

git的对象分为两类,对象和引用,对象就是一个文件,文件名是hash值。引用也是一个文件,它的文件名是正常的字符,它的文件内容只有一个别的文件民(hash)。

  1. 版本链:

每一个提交都是一个**版本对象。**除了第一个版本提交对象(首对象)之外,每一次提交对象中都有一个指针针指前一个提交对象。可以有多个不同的首提交对象,产生这个的情况通过fetch命令获取了多个不同版本库的版本链。

当然每一个新的仓库建立以后,第一次提交后就会有一个版本链,如果是克隆就一定了。

  1. HEAD引用对象:

它是提交等所有操作git仓库的基点,它指向一个提交、分支(普通本地分支,远程分支,远程跟踪本地分支),标签。

不是指向分支的HEAD,都叫分离的HEAD.

可以任意移动。

  1. 分支:

是一个引用对象,指向一个提交对象。也可以指向一个分支。

分支是用来改变某个提交对象,的下次提交对象的指向的方向。对一条提交连而言,他就像一棵树,在某棵树的末梢有两个分支,HEAD指向谁,下一次的提交就可以产生一个新的分叉。

分支**,在命令行中,要是没有分支,怎么找一个头对吧。。。分支还有这个作用;分支就是个头**

其实没有分支也可以,HEAD直接指向一个非末梢提交,进行一个提交,也会产生分支。但是没法标头,不好识别啊。

分支也是可以随意移动某个提交对象上的。

  1. 远程分支:

它的命名格式是:remote/branch

它不能受HEAD的提交移动,除非强制移动或者进行网络操作。通过更新远程仓库内容

  1. 远程跟踪分支:

这就是个本地分支,但是这个本地和远程分支关联一起了,所有自动合并的网络操作,都指的是这个分支和对应的远程分支的合并。

只有克隆时候有一个默认匹配的master远程跟踪分支,其他的远程分支也想要这个就得要获取手动进行匹配了。

  1. 合并:

  2. 工作目录:工作目录中保存的是某个版本的文件;

工作目录中的文件,等于HEAD指向的提交对象版本。如果HEAD指向改变,工作目录文件会跟着一起改变。

开始用命令真正的使用

建立一个版本库

  1. git init:

$ git add *.c

$ git add LICENSE

$ git commit -m ‘initial project version’

git commit -a 跳过暂存区

  1. git clone :

所有远程的分支都变成了,远程分支,只自动生成了一个本地的和remote/matser对应的远程跟踪本地分支,master

  1. 配置跟踪一个.gitignore 文件
  2. 查看修改:

当前修改后的文件——暂存区快照中的;git diff

暂存区中的(后一个 + )——最近一次提交中的:git diff --staged

  1. 删除:

$ git rm

会删除实际的文件

加 --cached 选项只会删除仓库中的文件,实际文件不被删除

  1. 移动文件:

不能直接在工作目录中移动,要用git mv

  1. 查看提交:

git log会显示从HEAD到树源头的提交这条线上的所有提交,这就显的分支的重要性了,没有分支咋用这个。hash值那么长。

加 -p显示每次提交的补丁

–start 简要显示

–pretty="…" 改变显示的格式

限制显示提交的数量

  1. 远程仓库

    1. 查看 git remote [-v显示url]
    2. 添加:git remote add
    3. 抓取所有数据:git fetch
  2. 抓取后本地跟踪分支自动合并远程分支:git pull

  3. 推送本地的某条提交(包括前面从树头到这里all):git push origin master

若是本地跟踪分支,远程仓库上的对应分支会自动合并。

  1. 查看服务器:git remote show

  2. 重名和移除:git remote rename/rm

  3. 标签:

    1. 列出:git tag

这个版本库需要信息(如果是克隆的话就不需要了)

  1. windows和linux都有对应的系统级别的配置文件,.git里面也有一个

  2. 往配置文件里写入配置(这里用命令)

    1. 用户名

git config [–global] user.name “Name”

  1. 邮箱

git config [–global] user.email [email]

  1. 编辑器(windows下)

$ git config [–global] core.editor “‘C:/Program Files/Notepad++/notepad++.exe’ -multiInst -notabbar -nosession -noPlugin”

解释:后面的这个字符串例子是,必须提供某个文本编辑器的exe目录,和运行时的参数。

一些命令

命令说明
git status这个能查看git仓库的各种文件状态,包括现在HEAD在什么地方
git branch branch-name git branch -f branch-name name-commit在目前提交上创建一个新的分支 让分支移动到某个,提交上,提交名可以用相对引用。
git checkout [branch-name] [hash-commit][any-name~|1] git checkout -b new-branchname切换HEAD指向分支,并改变工作目录中的文件 如果参数是某个提交的hash值,HEAD不在指向分支,而是单独的提交记录 往前移,也可以用相对引用,在一个分支名提交文件名HEAD的后面,加上"^“符号,就代表往上移动一个(或num个,这个要用”~"符号)相对,如果往前没有分支就会移动到提交上。 直接新建一个分支,并转移到这个分支上
git log查看当前提交的提交历史的hash值(从当前分支到该分支提交的最开始),用的时候可以只输入前几位就可以了。
git merge branch-name就是让对方融入进自己,可以多线合并如果两个分支不在同一直线,会新生成一个包括两个分支的提交(如果没有冲突,有的话自己修改),HEAD也会移到这里。
git rebase branch-name git rebase -I branch-name对方为基点,进行单线合并,如果在一条直线,那就没啥,如果不在,就会复制自己,在这个基点前创建一个分支,自己移到那里。 另外那个分支变秃了? 交互式
git reset 前面的提交名撤回到这个提交
git revert 某个提交名或者分支名并没有撤回,在本分支前新加一个,和这个参数提交前一样的提交。这样就可以分享到别的服务器那里了
git cherry-pick branch-name|hash-name ……在本提交点(或者分支上),自动复制数个参数指定的提交对象(分支对应的也是提交点),然后做出提交,HEAD自动向前移动(如果HEAD指向的是分支分支也会向前移动。 当你知道你所需要的提交记录(并且还知道这些提交记录的哈希值)时, 用 cherry-pick 再好不过了 —— 没有比这更简单的方式了。
git reset --hard 目标版本号”这个会使当前版本到这个目标版本之后的提交都消失

总结,

最关键的是理解这些概念,分支,原创分支,原创跟踪分支,合并。另外要说一下github这个网站,github是一个git仓库网站,上面保存着数以万计的仓库,有开源的也有私人的,是世界上最大的开源网站。自己申请个账号,创建个git仓库,虽然没有在电脑上,但它的功能和你自己创建的没有任何区别,可以在本地克隆你创建的仓库,把他作为远程仓库。

                                        |

总结,

最关键的是理解这些概念,分支,原创分支,原创跟踪分支,合并。另外要说一下github这个网站,github是一个git仓库网站,上面保存着数以万计的仓库,有开源的也有私人的,是世界上最大的开源网站。自己申请个账号,创建个git仓库,虽然没有在电脑上,但它的功能和你自己创建的没有任何区别,可以在本地克隆你创建的仓库,把他作为远程仓库。


  1. num ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值