0.摘要
本文主要介绍的git的使用方法,基于MacOS进行演示,其他系统类似。
1.安装Git
方式1:通过HomeBrew 安装,在中terminal输入:
brew install git
方式2:Xcode集成了Git。如果读者的机器上之前安装过Xcode,自带了git。读者可以通过以下命令验证是否已经安装了git。
git --version
如果没有,可以通过运行Xcode,点击Preferences,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
2.配置用户名和地址
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
--global参数:表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
执行完上述命令后,读者可以在主目录下找到一个名为.gitconfig的文件,记录了我们配置的信息。
如需修改,可通过再次执行命令,或vim ~/.gitconfig进行修改。
3.新建代码仓库
仓库,也称版本库,Git版本库记录了代码的每一次修改。因此,如果我们希望使用Git管理我们的代码,就需要先新建一个Git仓库,用来存储版本的修改信息。
mkdir DemoForGit #为仓库新建一个文件夹
cd DemoForGit #进入仓库文件夹
git init #将该文件夹初始化为git仓库
ls -a #初始化后,文件夹中会多出一个.git的目录,这一目录是用来记录Git信息的
当我们执行完git init 的时候,就完成了Git仓库的构建。并且系统会提示你这是一个空的仓库(empty Git repository)
初始化结束后,当前目录下多了一个.git
的目录,Git跟踪管理版本库的信息就记录在这一文件夹下。因此,用户尽量避免手动修改这个目录下的文件,否则会破坏Git版本管理信息。
这里新建文件夹不是必须的操作,读者也可以在非空文件夹下直接执行init操作。
4.把文件添加到版本库
注意:这里文件只是添加到本地版本库中,并不是远程服务器端。
首先我们在当前目录下新建一个文件,这里新建一个hello world程序作为示例。
在当前路径下,存在一个叫做hello.py的程序,然后,我们通过add(添加)和commit(提交)两步操作,把文件添加到版本库。
git add hello.py #把hello.py程序添加到版本库
git commit -m "say hello" #把hello.py程序提交到版本库
如果要一次性添加多个文件,可以通过多次执行add操作,或者以空格分隔多个文件,统一写在一条命令中。
git add file1.txt files2.txt #一次添加多个文件
commit操作,可以将所有已经add的文件一次性提交。
git commit 命令后面的-m参数:表示添加本次提交的说明。开发者在提交的时候,对该版本改动进行简要说明是非常有益的习惯。
如果在commit时候没有加-m参数,Git会“友善地”帮助你打开vim编辑器,并提醒您在‘#’区域外填写版本修改的说明。
这时候按‘i’进入编辑模式,完成编辑后按ESC,输入“:wq” 即可(冒号不能省略)。
如果需要查看提交记录,可以使用git log命令
git log #查看提交记录
git log --pretty=oneline #只显示一行
git log -2 #只显示最近2次的记录
git log -p #显示每次提交的difference
另外,git log命令还有许多额外的参数,详细用法可参加下面这篇博客:
https://blog.csdn.net/wh_19910525/article/details/7468549
5.查看Git状态
当我们在编辑代码的过程中,可以使用git status 命令随时查看代码的状态。
git status #查看当前仓库状态
比如,当我们修改readme.txt文件但没有add,则Git会提示我们文件已修改,但还未完成提交前的准备工作,readme.txt文件也为红色。
当我们完成add操作后,Git此时提示我们已经可以提交了,此时的readme.txt文件为绿色。
在add之前,如果想要查看本次提交的内容与之前版本的不同,可以使用git diff filename 命令,确认修改的内容
git diff readme.txt #显示readme.txt修改前后的不同
6.回退版本
直接上命令:
git reset --hard HEAD^ #回退到上个版本
git reset --hard HEAD^^ #回退到上上个版本
git reset --hard HEAD^^^ #回退到上上上个版本 //?好多^啊
…… #回退到上上上……个版本怎么办呢???Git当然没那么傻
git reset --hard HEAD~100 #回退到上100个版本 //还好不是100个^
下面,举个例子:
step1:我们新建一个reset_test.txt文档,在其中输入“Version=0”,并提交。
vim reset_test.txt
cat reset_test.txt
git add reset_test.txt
git commit -m "Version=0"
step2:上述过程5次,每次更改reset_test内容,并提交。
通过查看log信息,可以得到:
git -log -6 --pretty=oneline
由图可见,我们已经提交了6个版本,通过下面的方法可以回退到版本3:
step3:为了演示命令,这里先回退到版本4,再回退到版本3:
通过我们的回退操作,我们文档中的内容已经回到了版本3的状态。
7.反向回退
当我们把版本回退到Version3的后,发现还是Version5好一些,这时候怎么办呢?
此时,我们查看git log 信息会发现,HEAD已经指向了Version3,Version4和Version5已经消失不见了。当然,这都是小场面,不慌。
只要我们能够找到每一个版本的commit id (即一串黄色的编号),那么就还是可以恢复的。
通过查找,我们找了的Version5的commit id为:840782b3be5a9fa3c6b8e1ecdb1a20f3e9312661
git reset --hard 840782 #id不需要全部输入,前几位即可。
通过commit id 我们成功将版本又拉回了 Version5。
当然,可能更糟糕的是,随手执行了clear清屏操作,甚至关闭了terminal,同样不用慌:
git reflog #查看历史版本的commit id
git reflog记录了你需要的信息:
8.一键还原工作区和stage暂存区
假如熬夜的你一不小心趴在键盘上睡着了,导致你的工作区满屏乱码,这时候还原工作区绝对是一项体力活。所幸的是,你在睡着之前刚完成了一次git add 或者 git commit操作,这时候一条Git命令就能还你一个整洁的界面。
git checkout -- reset_test.txt #还原工作区至最新版本状态
注意:“--” 和 “reset_test”之间有空格。
如果reset_test.txt不是被修改,而是被删除了,checkout也是可以还原的。
另外,git checkout -- “filename”还原也分两种情况:
(一):执行了commit操作,stage中无内容,这时候还原得到的是最近一次commit的版本。当然,你也可以选择使用版本回退的方式实现同样的功能,前提是你不介意其他文件也会被还原。
(二):执行了add操作,还没有commit,stage中有内容,这时候还原得到的是stage中的内容。所以,经常add一下还是个不错的习惯呢。
总结:git checkout -- “filename” 可以将工作区还原至最近一次git add 或 git commit 的状态。