git 修改仓库的描述_git简介、基本命令和仓库操作

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Torvalds开始着手开发Git是为了作为一种过渡方案来替代BitKeeper。

开发过程如下图所示:

Git的功能特性:

从一般开发者的角度来看,git有以下功能:

1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。

2、在自己的机器上根据不同的开发目的,创建分支,修改代码。

3、在单机上自己创建的分支上提交代码。

4、在单机上合并分支。

5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。

6、生成补丁(patch),把补丁发送给主开发者。

7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。

8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。

从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:

1、查看邮件或者通过其它方式查看一般开发者的提交状态。

2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。

3、向公共服务器提交结果,然后通知所有开发人员。

优点:

1、适合分布式开发,强调个体;

2、公共服务器压力和数据量都不会太大;

3、速度快、灵活;

4、任意两个开发者之间可以很容易的解决冲突;

5、离线工作。

缺点:

1、资料少(起码中文资料很少);

2、学习周期相对而言比较长;

3、不符合常规思维;

4、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

git基本命令:

git init 表示初始化一个Git仓库。

git status 表示查看当前仓库的状态,可以随时掌握工作区的状态,例如可以看到有哪些文件被修改了,有哪些文件需要提交等,如果没有的话就会出现 working tree clean表示工作区很干净,没有被修改的文件或者没有需要提交的文件,如果有文件被修改了,可以结合git diff filename查看文件被修改了什么内容,也就是文件发什么了哪些变化。

git add filename 表示将文件添加到暂存区。

add可以反复多次使用,将多个文件添加到暂存区。如果一次性添加多个文件,直接使用空格分隔文件名就可以了。

git commit filename 表示将文件提交到仓库,有说明信息需要使用-m参数,变为这样:git commit -m "说明信息" filename。

这儿提交可以不用接文件名的,因为add到了暂存区,提交就是提交暂存区的内容,如果add了多个文件到暂存区,那么commit时不加文件名就表示将暂存区的文件全部提交,添加了文件表示只提交指定的那个文件。

git commit --amend命令可以重新修改提交信息。例如你之前提交了文件,但是你的描述信息写错了,这时可以使用它来重新修改提交信息,但是内容是没有变化的。

git diff filename 表示比较文件的不同地方,比如昨天修改了文件,但是今天已经不记得了修改了什么,这时可以使用这个命令查看今天的文件和昨天的文件有什么不一样。

必须在没有add进暂存区之前进行比较,如果已经添加进暂存区之后将无法比较出区别。

例如:

a/A.txt表示之前的文件,b/A.txt表示之后的,-号表示删除了内容,+号表示添加了内容并且可以看到添加了什么内容。

git log 命令可以查看从最远到最近的提交日志,git log --pretty=oneline表示提交日志在一行显示,不然的话太乱了不方便浏览。

git log -1命令可以查最后一次提交的信息,后面可以-n,表示可以查看最近几次的提交情况。

git log -p -2 命令还可以查看每次提交的差异变化,也就是说查看每次提交文件的变化内容,这里表示查看最近两次提交所发生的变化。

git log --stat命令可以查看每次提交的一些简略信息,比如那些文件被修改了,最后会有一句总结,表示有多少个文件被修改,增加了或者删除了。

git log 还可以和--graph结合使用,显示 ASCII 图形表示的分支合并历史。

git log --pretty 可以指定提交日志的显示格式,有oneline,short,full,fuller可以选择。还可以设置format,

它的常用选项是:例如git log --pretty=format:"%h - %an, %ar : %s"

Table 1. git log --pretty=format 常用的选项

选项 说明

%H 提交对象(commit)的完整哈希字串

%h 提交对象的简短哈希字串

%T 树对象(tree)的完整哈希字串

%t 树对象的简短哈希字串

%P 父对象(parent)的完整哈希字串

%p 父对象的简短哈希字串

%an 作者(author)的名字

%ae 作者的电子邮件地址

%ad 作者修订日期(可以用 --date= 选项定制格式)

%ar 作者修订日期,按多久以前的方式显示

%cn 提交者(committer)的名字

%ce 提交者的电子邮件地址

%cd 提交日期

%cr 提交日期,按多久以前的方式显示

%s 提交说明

例如:

有时候当我们修改了文件,但是想要恢复以前的某一个版本的文件,可以采用创建一个快照的形式方便回退到以前的某一个版本,在git中的快照就是commit。

图片中黄色的那一长串就是commit id。

当你想要回退到某一个版本的话,首先必须知道当前是在哪个版本,而在git中HEAD就表示当前版本,head就是一个类似指针,指向当前版本。上一个版本表示为HEAD,上上个版本表示为HEAD^,如果版本太多了,可以直接这样表示某一个版本HEAD~10,表示之前的第10个版本。

git reset --hard HEAD^ 命令表示回退到上一个版本。现在已经回退到上一个版本了。

但是如果你后悔了,还是想要以前的刚刚你修改的那个版本,怎么办,这时只要你的git bash 窗口没有关闭,你可以往上翻找你刚刚commit 的commit id然后

git reset --hard commit id 就可以回退到之前你刚刚的那个版本了。

在如果,第二天你又后悔了昨天的操作,那么现在还是可以找到你之前的版本的,我擦,git好神奇哦

git 使用了一个git reflog 来记录你的每一次命令操作的。

图片中黄色的那一串就是commit id,这时 git reset --hard commit id就可恢复了。

需要注意的是git是分布式版本控制工具,它是有一个暂存区概念的,每一次修改了需要add到暂存区然后在commit提交,如果修改了直接提交的话,是不会成功的,因为提交只会提交暂存区中有的修改。可以使用git diff HEAD -- filename 来查看工作区和版本库里面最新版本的区别。

那么如何撤销已经修改了的文件呢?有两种情况:第一,修改了文件,但是还没有add进暂存区;第二,修改了并且已经添加进了暂存区。

第一种情况,修改了还没有add进暂存区可以使用git checkout -- testzancunq.txt进行撤销工作区的修改,这样就回到了原来工作区内容的状态。

第二种情况,修改了并且已经添加进暂存区了,如下图:

这时可以使用git reset HEAD testzancunq.txt表示从暂存区中取消暂存,然后在使用git checkout -- testzancunq.txt进行撤销,完事!

8. 删除文件,在git中删除文件也是一种修改。

当你使用rm删除了文件之后,使用git status查看工作区状态如下图:

这个时候你可以恢复,但是如果你确定要删除文件,可以使用git rm filename 并且commit到git仓库中,这时文件就从版本库中删除了,也就是无法恢复了。

另一种情况是你删错了文件,在删除文件之前只要你将文件提交到了版本库中,都是可以恢复的,但是只能恢复到最新版本,会丢失最近一次提交后你修改的内容。

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

9. 当你不知道某个命令的作用时可以查看git 帮助文档,有三种方式:

git help verb

git verb --help

man git-verb

git help config 获取config手册

以上就是git在本地库中的文件的基本操作。

接下来是如何向远程仓库提交内容。这时需要注册一个github账号,并且github是基于SSH协议加密授权的,ssh是一种网络协议用于计算机之间的加密登录,就像远程操作服务器一样,例如linux,可以利用ssh远程连接操作服务器。每一台linux都配置了ssh协议。想要向远程仓库提交代码,需要ssh key,需要在github中添加ssh key。首先要生成ssh key。

ssh-keygen -t rsa -C "youremail@example.com"(邮箱要换成自己的邮箱) 表示使用rsa算法生成密钥,最后windows平台会在用户目录下生成.ssh的隐藏目录,以及id_rsa和id_rsa.pub两个文件,而id_rsa就是密钥,id_rsa.pub就是公钥。这样只需要将公钥id_rsa.pub添加到github中,就可以和本地的密钥id_rsa进行配对,完成授权过后就可以进行代码提交了。

添加成功过后进行测试:ssh -T git@github.com,如果出现了Hi.....就表示授权添加成功了。

Push命令:表示如果本地代码有更新了,就可以将它推送到远程仓库,以保持代码同步,例如:git push origin master表示将本地代码推送到master分支。

Pull命令:表示将远程仓库的代码更新到本地,例如:git pull origin master 表示将远程master的代码拉到本地。

有了Push和pull两个命令就可以向远程仓库提交代码了。如果有改动就添加到暂存区,没有问题就可以commit,最后将项目push到远程仓库。

向远程仓库提交内容有两种方式,一种是将项目从远程仓库clone下来,另一种是将本地仓库与远程仓库进行关联。

第一种方式,将项目从远程仓库中clone下来

git clone git@github.com:github名称/项目仓库。表示将项目从远程clone到本地。这个项目本身就是一个git仓库了,所以就不需要再进行git init了。

git push origin master 表示如果修改了文件,并且commit了,就直接将项目推送到远程仓库了。

第二种方式,将本地仓库和远程仓库关联起来,

例如本地仓库test2,远程仓库test,现在需要将test2中的代码提交到test中。这个时候需要将test和test2关联起来。

git remote add origin git@github.com:github名称/项目.git 表示将本地仓库和远程仓库关联起来,这个远程仓库的地址是git@github.com:github名称/项目.git,而origin是这个仓库的名字,以后推送就可以使用git push origin master表示推送到远程仓库origin的master分支。

git push -u origin master表示向test仓库提交了代码,默认是提交到master主分支上。第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值