Git
来源:互联网 发布:计算机通信与网络 pdf 编辑:程序博客网 时间:2024/06/03 21:31
本文是学习廖雪峰的git教程和网上其他教程后,整理出的笔记。包括了git的安装(windows)和一些在实际开发中常见情况下的常用基本命令。
廖雪峰的官方网站
Git配置
安装git
Windows下要使用很多Linux/Unix的工具时,需要Cygwin这样的模拟环境,Cygwin的安装和配置都比较复杂,不过msysgit已经完成了这些事,我们只要安装它就好。msysgit是Windows版的Git,从git for windows下载。网速慢的人,可以在CSDN下载频道下载。
安装流程
配置账号
打开Git Bash,在命令行输入
$ git config --global user.name "Your Name"$ git config --global user.email "youremail@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。用了git config命令的–global参数,表示你这台机器上所有的Git仓库都会使用这个配置。
链接远程仓库
GitHub用来提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以在注册了github账号后,还要创建SSH Key。
在用户主目录(C:\Users\Administrator)下,查看.ssh目录下是否存在id_rsa和id_rsa.pub两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Git Bash,创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
创建过程全部使用默认设置,在C:\Users\Administrator.ssh目录下会生成id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥。此时如网上所说,还会生成know_hosts文件,但我在实践中并没有,什么时候会生成,后面会说到。
登陆GitHub,打开“Settings”—“SSH and GPG keys”页面
点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
点“Add Key”,你就应该看到已经添加的Key
验证链接远程仓库是否成功,在命令行输入
$ ssh -T git@github.com The authenticity of host 'github.com (192.30.252.129)' can't be established.RSA key fingerprint is 16:27:xx:xx:xx:xx:xx:4d:eb:df:a6:48.Are you sure you want to continue connecting (yes/no)? yes #确认你是否继续联系,输入yesWarning: Permanently added 'github.com,192.30.252.129' (RSA) to the list of known hosts.Enter passphrase for key '/c/Users/xxxx_000/.ssh/id_rsa': #生成ssh kye是密码为空则无此项,若设置有密码则有此项且,输入生成ssh key时设置的密码即可。Hi xxx! You've successfully authenticated, but GitHub does not provide shell access. #出现词句话,说明设置成功。
前面说到的know_hosts文件这时候也会在用户主目录中生成。
Git常用命令
创建版本库
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
打开Git Bash,进入到我们需要Git管理的文件夹,在命令行输入
$ git init
这样仓库就创建好了,当前目录下会多一个.git的目录,这个目录是Git来跟踪管理版本库的。
提交文件修改
在介绍提交命令之前,我们先了解一下git的粗略工作过程。
工作区(Work Directory):就是电脑上我们平常使用的目录
版本库(Repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库Git的版本库里存了很多东西,其中最重要的就是称为stage的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
我们在工作区新建了一个readme.txt文件,要进行提交。
首先执行git add,将文件修改添加到暂存区
$ git add readme.txt
然后执行git commit提交更改,实际上就是一次性把暂存区的所有修改提交到HEAD指针指向的分支
$ git commit -m "say something"
修改文件版本
HEAD指向的版本就是当前版本,因此,Git允许我们使用命令git reset在版本的历史之间穿梭。
当我们想退回到之前某个commit版本的时候,用git log可以查看提交历史,以便确定要回退到哪个版本
$ git log$ git log --pretty=oneline
在获取commit id后就可以使用git reset来回到指定版本
$ git reset --hard <commit_id>
另外,我们还可以利用之前的HEAD指针
#返回上一个版本$ git reset --hard HEAD^#返回上100个版本$ git reset --hard HEAD-100
当我们想回到未来的某个commit版本的时候,用git reflog查看命令历史,以便确定要回到未来的哪个版本
$ git reflog
撤销修改
撤销文件的修改,存在两种情况:
- 仅在工作区进行了修改
- 在工作区完成修改后,使用了git add,推送到了暂存区
对于第一种情况,我们可以手动将修改的内容复原,但很容易出现错误。Git为我们提供了git checkout命令,来丢弃工作区的修改,文件回到最近一次git commit或git add时的状态
$ git checkout -- <file>
对于第二种情况,我们可以使用命令git reset把暂存区的修改撤销掉,重新放回工作区
$ git reset HEAD <file>
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,当我们用HEAD时,表示最新的版本。
添加远程仓库
我们在本地有了一个本地仓库,如果在GitHub上再创建一个Git仓库,并且让这两个仓库进行远程同步。那么,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。
首先,登陆GitHub,创建一个新的仓库
然后在Repository name填入和本地仓库相同的文件名,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库
接着打开Git Bash,进入到本地Git仓库,在命令行输入
$ git remote add origin git@github.com:<github_name>/<repository_name>.git
添加后,远程库的名字就是origin,这是Git默认的叫法
下一步,就可以把本地库的所有内容推送到远程库上
$ git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来
从现在起,本地就可以通过以下命令提交
$ git push origin master
克隆远程仓库
添加远程仓库是先有本地库,后有远程库,然后两者进行关联。如果从零开发,那最好的方式是先创建远程库,然后,从远程库克隆。
首先,登陆GitHub,创建一个新的仓库
勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件
接着打开Git Bash,使用命令git clone克隆一个本地库
$ git clone git@github.com:<github_name>/<repository_name>.git
分支功能
查看分支,当前分支前面会标一个*号
$ git branch
创建dev分支
$ git branch <branch_name>
切换分支,此时HEAD就会指向< branch_name >代表的分支分支
$ git checkout <branch_name>
git checkout命令加上-b参数表示创建并切换
$ git checkout -b <branch_name>
合并分支,将指定分支合并到当前分支
$ git merge <branch_name>
合并分支时,强制禁用Fast forward模式
$ git merge --no-ff -m "say something" <branch_name>
查看分支合并情况
$ git log --graph --pretty=oneline --abbrev-commit
隐藏当前分支
$ git stash
显示当前分支的隐藏分支
$ git stash list
恢复某个隐藏分支
$ git stash apply <stash_id>
删除某个隐藏分支
$ git stash drop <stash_id>
恢复某个隐藏分支并删除
$ git stash pop <stash_id>
删除分支
$ git branch -d <branch_name>
强行删除分支
$ git branch -D <branch_name>
标签功能
查看当前分支标签
git tag
当前分支创建标签
git tag <tag_name>
某个commit创建标签
git tag <tag_name> <commit_id>
删除标签
$ git tag -d <tag_name>