Git的介绍和常用命令使用

151 阅读4分钟

一、Git和SVN的区别

  • Git是分布式版本控制系统而SVN都是集中式的版本控制系统

集中化版本控制:都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。

  • 分布式版本控制:客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

二、介绍Git的三区和三状态

  • 工作区:工作区是对项目的某个版本独立提取出来的内容。
  • 暂存区:是一个文件,保存了下次将提交的文件列表信息。
  • 仓库区:Git 用来保存项目的元数据和对象数据库的地方。
  • 修改状态:如果自上次取出后,作了修改但还没有放到暂存区域。
  • 暂存状态:如果作了修改并已放入暂存区域。
  • 提交状态:如果 Git 目录中保存着的特定版本文件。

三、Git常用命令

  • 1、安装: 打开git官网http://git-scm.com/下载。
  • 2、设置用户信息:
git config --global user.name "John Doe" 
git config --global user.email johndoe@example.com
git config –-list  可以查看git信息
  • 3、获取 Git 仓库

第一种是在现有项目或目录下导入所有文件到 Git 中。

第二种是从一个服务器克隆一个现有的 Git 仓库。

首先的生成密匙:

ssh-keygen -t rsa -C "your_email@youremail.com" 生成私密,在.ssh下找到id_rsa.pub.把里面的密匙加到gitlab中,不然是不能提交代码的。

使用git init 对现有项目管理。会在目录下生成.git版本文件。或者克隆现有的仓库:git clone 你需要克隆的git项目地址 (有两种协议http、ssh)。

  • 4、克隆后会发现默认分支是master分支。
  • 5、创建新分支并切换到该分支:git checkout –b 分支名
  • 6、切换分支:git checkout 分支名
  • 7、检查当前文件状态:git status
  • 8、查看远程分支:git branch –r
  • 9、删除远程分支:git push origin --delete 分支名 或 git push origin :分支名
  • 10、把本地分支推到远程:git push --set-upstream origin 分支名
  • 11、删除本地分支: git branch -d 分支名
  • 12、删除远程仓库:git remote rm origin (比如我从GitHub下colne后,需要提交到我们自己的版本仓库时)
  • 13、添加到远程:git remote add origin https://你的远程git地址。 git push -u origin master //提交到远程版本库 u 是--set-upstream 的简写
  • 14、添加文件到暂存区:git add .
  • 15、提交文件: git commit -m '添加内容'
  • 16、跳过暂存区提交文件:git commit –a –m '添加内容'
  • 17、移除文件不纳入版本:git rm 文件
  • 18、从暂存区移除文件:git rm -–cached 文件
  • 19、查看提交历史:git loggit log --oneline --before={3.weeks.ago} --after={2016-08-19}
  • 20、打标签:git tag –a v1.4 -m 'version 1.4' (-m 选项指定了一条将会存储在标签中的信息)
  • 21、打完标签推送到远程:git push origin v1.4
  • 22、检出莫个标签作为开发分支:git checkout -b 分支名 v1.4
  • 23、推送到远程仓库更新:git push
  • 24、从远程仓库拉取更新:git pull
  • 25、回滚到当前版本、上个版本,就像没提交过一样:git reset --hard HEAD git reset --hard HEAD^
  • 26、回滚的日志(后悔药):git reflog
  • 27、统计某人贡献的代码行数:git log --author="$(git config --get user.name)" --since=2016-01-01 --before=2016-12-31 --pretty=tformat: --numstat | awk '{adds += $1; subs += $2; all += $1 + $2} END {printf "added lines: %s removed lines : %s all lines: %s\n",adds,subs,all}'