快速设置 - git常用命令大全
编写者:陈江南
时间:2018年6月2日08:20:14
Git 与 SVN 区别
GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。
Git 与 SVN 区别点:
- 1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
- 2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
- 3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
- 4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
- 5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
一、Git 安装配置
1
.在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行:
最新git源码下载地址:
2.
用户信息
配置个人的用户名称和电子邮件地址:
$ git config --global user.name "runoob"$ git config --global user.email test@runoob.com
如果用了
--global
选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
文本编辑器
设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::
$ git config --global core.editor emacs
查看配置信息
git
--
version
## 查看自带的版本
要检查已有的配置信息,可以使用 git config --list 命令:
$ git config --listhttp.postbuffer=2Muser.name=runoobuser.email=
test@runoob.com
这些配置我们也可以在
~/.gitconfig
或
/etc/gitconfig
看到
二、Git 工作流程
本章节我们将为大家介绍 Git 的工作流程。
一般工作流程如下:
- 克隆 Git 资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
我们先来理解下Git 工作区、暂存区和版本库概念
- 工作区:就是你在电脑里能看到的目录。
- 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
- 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
工作区就是你在电脑里能看到的目录,比如我的testgit
文件夹就是一个工作区。
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage
(或者叫index
)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向 master
的一个指针叫HEAD
。
前面讲了我们把文件往 Git 版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以现在git commit
就是往master
分支上提交更改。
你可以简单理解为,git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后执行git commit
就可以一次性把暂存区的所有修改提交到分支。
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。
当对文件执行 "git add" 命令时,暂存区的目录树被更新,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树写到版本库中,master 分支会做相应的更新。
当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
命令git reset HEAD file
可以把暂存区的修改撤销掉(unstage
),重新放回工作区。
当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
三、Git 创建仓库
git init
Git 使用
git init
命令来初始化一个 Git 仓库
使用我们指定目录作为Git仓库。 git init newrepo
git clone
git clone
<repo>
<directory>
参数说明:
- repo:Git 仓库。
- directory:本地目录。
$ git clone git
:
//github.com/schacon/grit.git
$ git clone git://github.com/schacon/grit.git mygrit
四、Git 基本操作
$ git add README hello.php
git add 命令可将该文件添加到缓存
$ git add . 把未提交过的文件工作区所有文件添加到暂存区
git status -s 以查看在你上次提交之后是否有修改,加-S简洁输出
vim README 创建编辑文件
mkdir runoob-test 创建文件夹
echo "创建文件并把该内容写入到文件" >> file.txt
cat README 查看文件 view README
touch README.md 创建文件README.md
head -10 README.md 查看README.md文件前10条内容
head -10 README.md > test.txt 截取README.md文件前10条内容复制到test.txt文件中
git reset HEAD file
可以把暂存区的修改撤销掉(
unstage
),重新放回工作区。
git diff
执行 git diff 来查看执行 git status 的结果的详细信息。
- 主显示文件未缓存的改动内容:git diff
- 只显示文件已缓存的内容: git diff --cached
git commit
使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。
git commit -am '修改 hello.php 文件' 在加入到暂存区修改后,可以用该命令省去再次单独添加步骤。
git rm <file> 删除当前文件,前提该文件没有到缓存。
git rm -f <file> 强制删除之前修改过并且已经放到暂存区域的文件,工作区文件也被删除。
git rm --cached <file> 只把文件从暂存区域移除,工作目录中仍存在
git rm –r * 进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录。
git mv 命令用于移动或重命名一个文件、目录、软连接。 如:
$
git mv README README
.
md
五、Git 分支管理
git branch (branchname) 创建分支
git checkout (branchname) 切换分支
git branch 查看总分支数量
git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下,从而在该分支中操作。
git branch -d (branchname) 删除分支命令
$ git merge newtest 我们将 newtest 分支合并到主分支去
合并冲突:
1.合并冲突后,手动修改
2.
在 Git 中,我们可以用 git add 要告诉 Git 文件冲突已经解决
$ git status
-
sUU test
.
txt$ git add test
.
txt $ git status
-
sM test
.
txt$ git commit
[
master
88afe0e
]
Merge
branch
'change_site'
现在我们成功解决了合并中的冲突,并提交了结果。
六、Git 查看提交历史
git log 列出历史提交记录
git log --oneline 来查看历史记录的简洁的版本。
$ git log --oneline --graph 用 --graph 选项,查看历史中什么时候出现了分支、合并。开启了拓扑图选项
$ git log --reverse --oneline 用 '--reverse'参数来升序显示所有日志。
$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges (--no-merges 选项以隐藏合并提交)
--版本回退:
在 Git中,用HEAD
表示当前版本,也就是最新的提交commit id
,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
。
现在我们要把当前版本回退到上一个版本,就可以使用git reset
命令:
只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,假设找到那个commit id
是2e70fdf...
,就可以指定回到未来的某个版本:
你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id
怎么办?
Git提供了一个命令git reflog
用来记录你的每一次命令:
![git-reflog](http://blog.u.qiniudn.com/uploads/git5.png)
终于舒了口气,于是你看到的commit id
是2e70fdf
,现在,你又可以乘坐时光机回到未来了。
七、Git 标签
$ git tag -a v1.0
执行$ git log --oneline --decorate --graph 可以看到我们的标签了
$ git tag -a v0.9 85fc7e7 追加GIT标签$ git log --oneline --decorate --graph
$ git tag 查看所有标签
指定标签信息命令:-m 不会打开编辑器了
git tag -a <tagname> -m "runoob.com标签"
PGP签名标签命令:
git tag -s <tagname> -m "runoob.com标签"
八、Git 远程仓库(Github)
1
.$ ssh-keygen -t rsa -C "youremail@example.com" 如:514418695@qq.com
github 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开 id_rsa.pub,复制里面的 key。回到 github 上,进入 Account =>Settings(账户配置)。
2.
左边选择 SSH and GPG keys,然后点击 New SSH key 按钮,title 设置标题,可以随便填,粘贴在你电脑上生成的 key。
3.
为了验证是否成功,输入以下命令:
4.创建一个远程仓库的别名标签(好处:输入这个别名 相当于输入了这个一大串仓库地址哦!)
$ git remote add origin(随便写别名) git@github.com:
tianqixin/runoob-git-test.git(后面这部分跟进仓库名字更改)
查看远程仓库
git remote 查看远程仓库
$ git remote -v 加上 -v 参数,你还可以看到每个别名的实际链接地址。
提取远程仓库
$ git fetch origin(别名)
$ git merge origin(别名)/master
以上两个可以用这个代替哦:git pull origin master
推送到远程仓库
$ git push origin(仓库别名) master # 推送到 Github
添加远程仓库
$ git remote add origin2 git@github.com:tianqixin/runoob-git-test.git
删除远程仓库
$ git remote rm origin2 # 删除仓库 origin2
九、命令配置别名
有没有经常敲错命令?比如git status
?status
这个单词真心不好记。
如果敲git st
就表示git status
那就简单多了,当然这种偷懒的办法我们是极力赞成的。
我们只需要敲一行命令,告诉Git,以后st
就表示status
:
git config --global alias.st status
|
当然还有别的命令可以简写:
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
|
--global
参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。
在撤销修改一节中,我们知道,命令git reset HEAD file
可以把暂存区的修改撤销掉(unstage
),重新放回工作区。既然是一个unstage
操作,就可以配置一个unstage
别名:
git config --global alias.unstage 'reset HEAD'
|
配置一个git last
,让其显示最后一次提交信息:
git config --global alias.last 'log -1'
|
甚至还有人把lg
配置成了:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
|
十、配置文件
配置Git的时候,加上–global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
配置文件放哪了?每个仓库的Git配置文件都放在.git/config
文件中。
而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig
中。
![可怜](https://static-blog.csdn.net/xheditor/xheditor_emot/default/cute.gif)
彼岸花开:2018年6月2日09:08:142