Git

参考廖雪峰的Git教程

Git是目前世界上最先进的分布式版本控制系统。版本控制系统,能记录每次文件的改动。

集中式版本控制系统,版本库是集中存放在中央服务器的,需要联网。SVN修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制系统。

分布式版本控制系统,根本没有中央服务器,每个人的电脑上都是一个完整的版本库,不必联网。多人协作时,只需把各自的修改推送给对方。因为每个人的电脑都有完整的版本库,安全性高很多。(通常也有一台充当“中央服务器”的电脑,但仅仅是用来方便“交换”大家的修改)

注意:

所有的版本控制系统,只能跟踪文本文件的改动,比如TXT、网页、程序代码等。而图片、视频、Word文件是二进制文件,没法跟踪文件的变化。

Nodepad++:使用Windows要特别注意,千万不要使用Windows自带的记事本编辑任何文本文件,会在每个文件开头添加0xefbbbf字符,会遇到很多问题。建议下载Nodepad++代替记事本,把Notepad++的默认编码设置为UTF-8 without BOM。

UTF-8编码:文本是有编码的,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

一、安装

在Windows上使用Git,可从Git官网直接下载安装程序https://git-scm.com/downloads,按默认选项安装。开始菜单“Git”->“Git Bash”,弹出类似命令行窗口如下图,说明Git安装成功。

Git是分布式版本控制系统,每台机器必须自报家门(名字和Email地址)。--global表示你这台机器所有的Git仓库都使用这个配置。在命令行输入:

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

二、工作区和版本库

工作区(Working Directory)指在电脑里能看到的目录。版本库(Repository)指工作区的隐藏目录.git,这个不算工作区。

Git的版本库有stage(或者叫index)暂存区,Git自动创建的第一个分支master,及指向master的指针HEAD。

git add把文件修改添加到暂存区,git commit把暂存区的所有内容提交到当前分支。Git跟踪并管理的是修改,而非文件。每次修改,如果不用git add到暂存区,就不会加入到commit中。

git-repo

三、创建版本库

版本库又名仓库,可简单理解为一个目录,该目录里所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,在将来某个时刻可以“还原”。

(1)创建一个空目录learngit,有内容的目录也可以。如果使用Windows系统,确保目录名不含中文。

(2)运行git init把这个目录变成Git可以管理的仓库,当前目录下多了.git文件夹(默认隐藏)。

(3)把文件添加到版本库。编写文件,放到learngit或其子目录下。

四、基本命令

git add readme.txt

告诉Git,把文件修改添加到仓库;

git commit -m "wrote a readme file"

告诉Git,把(多个)文件提交到仓库,-m后面输入的是本次提交说明,最好是有意义的;

git status

获取仓库当前的状态;

Untracked files 有未被跟踪的文件
Changes to be committed 有未提交的文件
nothing to commit, working tree clean 没有被修改的文件

git diff

查看具体修改的内容(difference),显示的格式是Unix通用的diff格式。

五、版本回退

git log

查看历史记录,显示从最近到最远的提交日志,以便确定要回退到哪个版本。git log --pretty=oneline使每条记录显示在同一行。

git reset --hard b8094

回退到指定版本,可以是未来的版本。

git reset --hard HEAD^

回退到上一个版本。

git reflog

记录你的每一次命令。如果已经关闭cmd,要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

每提交一个新版本,Git会把它们自动串成一条时间线。Git在内部有个指向当前版本的HEAD指针,回退版本时,Git仅仅是修改HEAD的指向,版本回退速度非常快。

b8094a0...是commit id(版本号),是SHA1计算出来的一个非常大的数字,用十六进制表示。Git是分布式的版本控制系统,多人在同一个版本库里工作时为了避免冲突。版本号写前几位就可以,Git会自动去找。

当前版本HEAD,上一个版本HEAD^,上上一个版本HEAD^^,往上100个版本HEAD~100。cmd控制台中换行符默认是^,输入HEAD^,回车可能出现more?问下一行是否需要再输入,最好使用HEAD~。

 

git checkout -- readme.txt 

readme.txt文件在工作区的修改全部撤销,这里有两种情况:

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

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

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

git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。再使用git checkout

假设你不但改错了东西,还从暂存区提交到了版本库,怎么办呢?还记得版本回退一节吗?可以回退到上一个版本。不过,这是有条件的,就是你还没有把自己的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?我们后面会讲到远程版本库,一旦你把stupid boss提交推送到远程版本库,你就真的惨了

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

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

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

 

 

 

.gitignore项目忽略文件  所使用IDE的配置文件,如.idea(WebStrom)、.vscode

.git存放项目的不同版本

 

使用码云

码云(https://gitee.com/),国内的Git托管服务。码云提供免费的Git仓库,还集成了代码质量检测、项目演示等功能。对于团队协作开发,码云还提供项目管理、代码托管、文档管理的服务,5人以下小团队免费。

(1)注册账号并登录,上传自己的SSH公钥。右上角用户头像->菜单“设置”->“SSH公钥”,填写一个便于识别的标题,然后把用户主目录下的.ssh/id_rsa.pub文件的内容粘贴进去:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章