安装git:
在Windows上安装Git
msysgit是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
注意git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
一:创建版本库的步骤:
①、创建一个空目录(也可以是一个已经存在的非空目录,但也要把当前操作路径转到该目录下也就是:$ cd test)
$ git mkdir test //创建一个空目录(test)
$ cd test //打开test目录
$ pwd //显示当前目录所在地址
如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
②、通过$ git init 命令将该目录变成git可以管理的仓库
$ git init
此时在当前目录下会多了一个.git的目录,这个目录是用来跟踪管理版本的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果你没有看到.git
目录,那是因为这个目录默认是隐藏的,用$ ls -ah
命令就可以看见。
③、把文件添加到版本库
把你想要添加到版本库的文件(如readme.txt)放在当前(test)目录下(子目录也行)
第一步:使用命令 $ git add <fileName>(如$ git add readme.txt ) 注意,该命令可重复使用,添加多个文件
如:$ git add file1.txt
$ git add file2.txt file3.txt
第二步:使用命令 $ git commit -m "提交该版本的原因",完成。
完整示例:
二、对该目录的文件进行操作
我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件。
$ git status 命令可以告诉我们当前仓库的状态,是否有被修改,如果想看具体什么地方被修改过可以用$ git diff 命令
$ git diff <file> 命令
$ cat <file>命令可以查看当前文件的内容
修改完成确定无误后可提交到本地仓库,使用 git add <file>, git commit
小结
①要随时掌握工作区的状态,使用git status
命令
②如果git status
告诉你有文件被修改过,用git diff <file>
可以查看修改内容。
三、版本回退
①、HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交3628164...882e1e0
(注意我的提交ID和你的肯定不一样),上一个版本就 是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
$ git reset --hard HEAD^ 回退到上一个版本
$ git reset --hard 未来版本Id 回到未来的版本
②穿梭前,用git log
可以查看提交历史,以便确定要回退到哪个版本。
③要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本。
四、工作区和暂存区
我们在电脑里操作的目录文件就是工作区,
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
分支和HEAD
的概念我们以后再讲。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。
$ git diff HEAD -- <file>
命令可以查看工作区和版本库里面最新版本的区别:
文件每次修改,如果不add
到暂存区,那就不会加入到commit
中。
$ git status 命令可以看到工作区和暂存区的状态,是否有被修改;
Administrator@WIN-BUR58HCGOTD MINGW32 ~/learngit (master)
$ git status
On branch master
Changes not staged for commit: //说明暂存区的状态,这句话表明暂存区没有任何文件,若为(Changes to be committed:),则说明暂存区有文件
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt //说明工作区的状态,readme.txt文件有被修改
no changes added to commit (use "git add" and/or "git commit -a")
五、撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- <file>
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
六、删除文件
场景一: $ rm <file> 在工作区中删除文件,相当于在工作区修改了文件
如果还没将该删除提交到state(暂存区),想要恢复删除的文件,可以用 $ git checkout --<file>
场景二:$ git rm <file> 在工作区中删除了文件,并将 该删除提交到了state(暂存区),此时想要恢复该被删除的文件,分两步,第一步用命令 git reset HEAD <file>,就回到 了场景一,第二步按场景一才操作
注意:命令git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改 的内容。
远程仓库
在继续阅读后续内容前,请自行注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户(C:UsersAdministrator)主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容:
点“Add Key”,你就应该看到已经添加的Key:
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
最后友情提示,在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。
一、添加远程仓库
首先在github创建一个和本地仓库相同名称的空仓库,
然后将一个已有的相同名称本地仓库与之关联,用命令:$ git@github.com:zhxling/learngit.git 将zhxling换成你自己的GitHub账户名
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容;
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的 master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
二、从远程库克隆
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone
命令克隆。如:
$ git clone git@github.com:zhxling/2048.git
Git支持多种协议,包括https
,但通过ssh
支持的原生git
协议速度最快。
分支管理
一、创建与合并分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
二、解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph
命令可以看到分支合并图。