一:Git简介及安装
1, git是目前世界上最先进的分布式版本控制系统。
2, 在Windows上安装Git。msysgit是Windows版的Git,从下载,然后按默认选项安装即可。
3, 安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!版本查看命令:git --version
4, 注意:git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"
二: 创建版本库
1, mkdir 创建空目录; pwd命令用于显示当前目录。 在我的window系统上, 这个仓库位于/c/Users/Administrator/learngit
$ mkdir learngit$ cd learngit$ pwd/c/Users/Administrator/learngit
2, 通过git init
命令把这个目录变成Git可以管理的仓库:
$ git initInitialized empty Git repository in C:/Users/Administrator/learngit/.git/
3, 通过ls -ah命令可以查看.git的隐藏目录。
三: 将文件添加到版本库
1, 所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。
2, now, 编写一个readme.txt文件,并放入learngit目录下,txt文件内容如下:
Git is a version control system.Git is free software.
3, 操作第一步,用命令git add
告诉Git,把文件添加到仓库:
$ git add readme.txt
4, 操作第二部, 用命令git commit
告诉Git,把文件提交到仓库:
四: change提交
1,使用 git commit -m "xxx" 命令git commit告诉Git,把文件提交到仓库
$ git commit -m "wrote a readme file"[master (root-commit) cb926e7] wrote a readme file1 file changed, 2 insertions(+)create mode 100644 readme.txt
2, 修改readme.txt 增加一行内容: hello git
3, 使用git status命令查看结果:
$ git status# On branch master# Changes not staged for commit:# (use "git add..." to update what will be committed)# (use "git checkout -- ..." to discard changes in workingdirectory)## modified: readme.txt#no changes added to commit (use "git add" and/or "git commit -a")
4, 该命令提示, readme.txt已经被修改了, 但还没有准备提交的修改。
5, 使用git diff 查看具体的修改详情, 查找difference。
$ git diff readme.txtdiff --git a/readme.txt b/readme.txtindex 46d49bf..9247db6 100644--- a/readme.txt+++ b/readme.txt@@ -1,2 +1,2 @@-Git is a version control system.+Git is a distributed version control system.Git is free software.
总结: 每次modified之后,先git status查看工作区的状态, 如果git status 显示文件被修改过, 用git diff 查看修改的内容,最后再git commit -m “xxx”。
五: 使用git log查询变更历史记录
1, git log
$ git logcommit 088cc4a4decbfd70c1b47fc8be3707bcb825938bAuthor: PioVuzDate: Mon May 1 12:32:59 2017 +0800 add xxxcommit cabadd943aaac4b0e0b38ff49b53caf52c160011Author: PioVuz Date: Thu Apr 27 23:04:23 2017 +0800 wrote a readme file
2, git log --pretty=oneline
$ git log --pretty=oneline088cc4a4decbfd70c1b47fc8be3707bcb825938b add xxxcabadd943aaac4b0e0b38ff49b53caf52c160011 wrote a readme file
六: 版本回退
1, git reset --hard HEAD^ 回退到上一个版本
Administrator@PioVuz MINGW64 ~/learngit (master)$ git reset --hard HEAD^HEAD is now at cabadd9 wrote a readme file
2, git reset --hard cabadd9 ps: cabadd9为commit id的回退到指定版本
七: 版本回退之后,再前进。
1, git reflog 查看记录的每一次命令。
$ git reflogcabadd9 HEAD@{ 0}: reset: moving to cabaddcabadd9 HEAD@{ 1}: reset: moving to HEAD^088cc4a HEAD@{ 2}: commit: add xxxcabadd9 HEAD@{ 3}: commit (initial): wrote a readme file
总结:
• HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
• 穿梭前,git log可以查看提交历史,以便确定要回退到哪个版本。
• 要重返未来,git reflog查看命令历史,以便确定要回到未来的哪个版本。
八: 关于工作区和暂存区
1, 工作区(Working Directory): 就是电脑能够看见的目录, 比如我的learngit文件夹就是一个工作区, 而目录".git",是Git的版本库。Git版本库里存了很多东西, 其中最重要的就是称为stage(index)的暂存区, 还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫head。
总结:暂存区是git十分重要的概念,执行流程如下:
1, modified之后,未git add时,文件存在于工作区(Working Directory)中 。
2, modified之后, 且git add之后, 文件存在于版本库中的暂存区(Stage)中。
3, 在git add之后,且git commit 之后,就会将所有Stage中的待commit的modified提交到分支(master)中,然后清空Stage, 此时提示工作区没有任何修改(working directory clean)。
八:管理修改
如果,在连续两次modified之后, 正确的流程是:第一次修改->add->第二次修改->add->commit。相当于将前两次修改合并commit
因为git跟踪管理的是修改而并非文件。
九: 撤销修改
git checkout -- readme.txt
该命令,是将readme.txt文件在工作区的修改全部撤销, 这里有两种情况:
1, readme.txt自修改后还没有被放到暂存区, 现在撤销修改就回到和版本库一模一样的状态;
2, readme.txt已经添加到暂存区,又做了修改, 现在撤销修改就回到添加到暂区后的状态。
3, readme.txt自修改后已经git add。此时可以通过git reset HEAD readme.txt将Stage的修改撤销掉,重新放回工作区。
$ git reset HEAD readme.txtUnstaged changes after reset:M readme.txt
然后,再使用git checkout -- readme.txt 将工作区的修改全部撤销。
总结: git reset 既可以回退版本, 也可以把暂存区的修改回退到工作区。 使用HEAD时, 即表示最新版本。
十: 删除文件
场景: create new file "test.txt", add & commit. -> git rm test.txt -> git commit -m "删除了text.txt文件"
如果发现删错了, 可以从版本库里的版本去恢复。
git checkout -- test.txt
十一: 远程仓库(Remote Repository)
(创建仓库的具体步骤请参考网络资源)
1, 创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接 跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com"
2, 登陆gitHub添加SSH key
3, 添加远程库, 登陆GitHub,than click "Create a new Repository", 创建一个新的仓库。
4, 根据GitHub的指示, 在本地仓库learngit运行命令:(PioVuz为你自己的GitHub账户名)
$ git remote add origin git@github.com:PioVuz/learngit.git
5, 首次建立远程库使用命令
$ git push -u origin master
6, 推送完master分支之后,就可以在GitHub中看到和自己一模一样的仓库了。
7, 从现在开始, 只要本地作了提交, 就可以通过命令:git push origin master 将本地master 分支的最新修改推送到GitHub, 此时你就拥有了自己的分布式版本库。
$ git push origin master
总结: 分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,太方便了!