git的安装与使用
本文介绍git在ubuntu上的安装与使用。
git安装与配置
ubuntu系统不自带git,需要自己安装:
sudo apt-get install git
安装完成后,设置用户名和邮箱地址:
git config --global user.name "YOUR NAME"
git config --global user.email "YOUR EMAIL ADDRESS"
创建本地版本仓库
在库文件夹比如learngit下初始化git仓库:
git init
在文件夹中添加文件,比如:classification.cpp,然后可以添加文件到git仓库,分两步进行:
第一,用git add命令告诉git,将文件添加到仓库:
git add README.md
第二,用git commit命令告诉git,将文件提交到仓库:
git commit -m "add a new file"
添加到远程仓库
git是分布式版本控制系统,同一个git仓库可以分布到不同的机器上,这儿的机器,可以指公司的git服务器或者github,下面以github为例,介绍怎样将本地git仓库添加到远程仓库。
本地仓库和github的连接有两种方式:
- HTTPS连接(比如地址为:
https://github.com/gitusername/learngit.git
) - SSH连接(比如地址为:`git@github.com:gitusername/learngit.git`)
HTTPS连接
使用HTTPS连接的不同之处在于:其一,不需要SSH key;其二,上面第一条命令地址要改为HTTP地址:
git remote add origin https://github.com/gitusername/learngit.git
步骤简单,也是github推荐的连接方式,然而其缺点为速度比SSH连接方式慢。
SSH连接
SSH加密传输首先要有SSH key,生成过程包括:
第一步,创建SSH key。输入下面指令:
ssh-keygen -t rsa -C "youremail@example.com"
之后可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第二步,登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
然后,在github上创建一个名为learngit的空的仓库(不包含README文件)。
将本地仓库与github仓库相关联并推送内容包含下面两步:
第一,输入下面命令:
git remote add origin git@github.com:gitusername/learngit.git
其中,origin代表远程库,是git的默认叫法。
第二,将本地库内容推送到远程库:
git push -u origin master
由于远程库是空的,第一次推送master分支时,加上了-u参数,git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。再次推送到远程github仓库时,输入简化的命令即可:
git push origin master
从远程仓库克隆
上一节介绍先有本地库,后有远程库的时候,如何关联远程库。假设我们从零开发,最好的方式是先创建远程库,然后,从远程库克隆到本地。
首先在github上创建一个新的仓库,仓库名为learngit,这次要勾选Initialize this repository with a README。
远程库已经准备好了,下一步是用命令git clone克隆一个本地库,也分两种方式。
SSH连接克隆命令为:
git clone git@github.com:gitusername/learngit.git
HTTP连接克隆命令为:
git clone https://github.com/gitusername/learngit.git
在本地仓库修改完代码后,推送到github库:
git push origin master
git常用命令
常规操作
git status # 查看版本库状态
git log # 查看提交历史
git diff # 比较当前工作目录与版本库的差别
git add file # 向版本库添加文件
git add directory/ # 向版本库添加文件夹
git commit -m "description" # 提交并添加描述
删除文件(夹)
git rm file # 同时删除本地文件与远程分支文件
git rm --cached file # 只删除远程分支文件,保留本地文件
git rm -r directory # 同时删除本地文件夹与远程分支文件夹
git rm -r --cached directory # 只删除远程分支文件夹,保留本地文件夹
恢复到指定版本
项目跟踪工具的一个重要任务之一,就是使我们能够随时恢复到某一阶段的工作。
命令形式:
git reset [--mixed | --soft | --hard]
其中:
--mixed
仅是重置索引的位置,而不改变你的工作树中的任何东西,并且提示什么内容还没有被更新。这个是默认的选项。
--soft
既不触动索引的位置,也不改变工作树中的任何内容,这个选项使你可以将已经提交的东西重新逆转至"已更新但未提交(Updated but not Check in)"的状态。
--hard
将工作树中的内容和头索引都切换至指定的版本位置中,也就是说自 之后的所有的跟踪内容和工作树中的内容都会全部丢失。慎用。
举例:
撤销上次提交(commit),保留当前所有更改:
git reset --soft
彻底恢复到上次提交的版本,放弃当前所有更改:
git reset --hard
彻底返回到最近两次提交之前的版本:
git reset --hard HEAD~2
管理分支
如果项目存在多个分支就需要进行分支管理。
查看分支:
git branch
使用以下命令创建分支并将创建的分支设置为当前工作分支:
git branch new_branch
git checkout new_branch
或者
git checkout -b new_branch
删除分支:
git branch -d new_branch # 先检查分支是否合并到其他分支上,若没有合并则无法删除
git branch -D new_branch # 直接删除分支,不会检查分支状态
查看版本库的发展记录:
git show-branch
查看两个版本的差异情况:
git diff B1 B2
合并其他分支到主分支上:
git check master
git merge -m "merge from new_branch" new_branch
或者
git pull . new_branch
合并远程库到本地主分支:
git pull --rebase
注意:
- 执行
git pull --rebase
的时候必须保持本地目录干净。即:不能存在状态为 modified 的文件(存在Untracked files是没关系的)。 - 如果出现冲突,可以选择手动解决冲突后继续 rebase,也可以用
git rebase --abort
放弃本次 rebase。
最后,将本地提交好的分支推送到远程仓库:
git push origin master
参考
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!