git命令
一、Git与SVN的对比
1)Git是分布式的SCM,SVN是集中式的。
2)Git每个历史版本存储完整的文件,SVN存储文件差异。
3)Git可离线完成大部分操作,SVN则依赖于网络。
4)Git有着更优雅的分支和合并实现。
5)Git有更强的撤销修改和修改历史版本的能力。
6)Git速度更快,效率更高。
二、Git安装与简单配置
略
三、Git命令
查看版本 git --version
查看计算机里有哪些git版本 并选择您想使用的版本
查看计算机里有哪些git版本which -a git
配置.bash_profile文件,选择自己需要的版本 vim .bash_profile
加入需要制定环境相对路径 export PATH '/user/local/git/bin:$PATH'
编辑过后 重新载入 base_profile
配置自己的git 信息
配置自己的用户名 git config --global user.name xud
配置自己的用户邮箱 git config --global user.email xud@123.com
git配置的三个级别
system 针对于一个系统 < global 针对于一个用户 < local 针对于一个仓库
查看git文档
git config --help
git help config
重命名git 命令
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.ci commit
初始化一个git仓库
git init git_test 创建了一个叫git_test 的仓库,并在你制定的目录下边建立了一个git_test文件夹。同时在文件夹中生成了.git
git init --bare git_bare_test 生成一个裸的仓库,它不带.git文件,也就是不带工作区。
git clone
gi clone http://github.com/ypsc.git
Git仓库的三个区域
working directory:工作区
staging area:暂存区
history repository:历史仓库
Git工作区直接跟暂存区打交道暂存区跟版本库打交道
从工作区中添加内容到暂存区
将暂存区的内容提交到版本库
从版本库中检出内容到工作区
git add 主要用于把我们要提交的文件信息添加到暂存区中
git add -u 把所有tracked文件中被修改过或已删除文件的信息添加到暂存区。它不会处理untracted的文件
git add -A 表示把所有tracked文件中被修改过或已删除文件和所有untracted的文件信息添加到暂存区
git add -i 查看所有修改过或已删除文件但没有提交的文件
git add . 添加所有文件
git commmit:把暂存区内容添加到版本仓库中
git commit -m '提交的问题描述'
git status 查看工作区、暂存区和版本库的差异情况
git rm 在git中我们可以通过git rm命令把一个文件删除,并把它从git的仓库管理系统中移除。但是最后要之心git commit 才真正提交到git仓库中
git rm -a
git commit -m '删除了一个文件'
删除暂存区中的a文件,要用–cached参数
git rm --cached a
git mv:git文件重命名或移动路径时使用命令
git mv a c 将 a文件命名为c文件
gitignore:把不需要跟踪的文件添加到这个文件中就可以避免跟踪了。在这个文件中可以使用通配符。
有些时候文件夹里没有这个文件,你可以自己手动建一个.gitignore文件。
四、Git分支
当我们想给已经上线的一个项目添加一个新功能,可以增加一个新分支,在分支上编写代码,等这个新功能开发完毕之后,再把这个新功能合并到主分支上。
git本地创建分支 git branch test //创建一个test分支
创建了分支,我们并没有直接到这个分支上,而还是在个主分支上。我们需要用切换分支命令切换到新创建的test分支上
git branch 不带参数,列出本地已经存在的分支,并且在当前分支前面会加“*”号标记
git branch -r 列出远程分支
git branch -a 列出远程分支和本地分支
重命名分支,如果newbranch名字分支已经存在,则需要使用 -M强制重命名,否则,使用-m进行重命名
git branch -m oldbranch newbranch
git branch -M old branch newbranch
删除branchname分支
git branch -d /-D branchname
删除远程 branchname分支
git branch -d -r branchname
Git给分支起别名(也叫打标签)
git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象。建议使用附注标签。
创建轻量标签 git tag v0.1.2 -light
创建附注标签 git tag -a v0.1.2 -m '0.1.2'版本
创建轻量标签不需要传递参数,直接制定标签名称即可。
创建附注标签时,参数a即annotated的缩写,制定标签类型,后附标签名。参数m指定标签说明,说明信息会保存在标签对象中。
在学习这个给分支起别名的操作前,我们要会使用一个查看Log日志的命令,用这个命令查出我们现在的Git情况,然后再给它起名。
查看版本历史示意图:
git log --oneline --decorate --graph --all
git tag 'v0' 51bcb0d
我们可以起个别名 git config --global alias.log "git log --oneline --decorate --graph --all"
就可以用 git log 来查看日志了
分支之间的切换
git chekout daily //切换到daily分支上
切换分支前保存本地的修改和暂存区的修改
当我们在一个分支上作了修改,提交到了暂存区,但是没有提交到版本库中。这时我们要切换分支(比如切换到master分支 git checkout master),系统会报错,提示我们暂存区有文件没有提交。如果我们还不想提交文件,这时我们就可以使用下边的命令把暂存区的文件保存起来
git stash save -a 'stash1' //把当前分支的内容藏起来
git stash list //可以查看那我们藏匿的内容
git stash pop --index stash@{0}
我们这时候用git status命令查看一下git状态,会发现我们藏匿的东西已经还原回去了。这条命令不仅恢复了藏匿的内容,并删除了藏匿区的内容,由多个动作组成。如果我们只想还原暂存区的藏匿内容,但并不删除藏匿区内容的话,可以使用下边这条命令。
本地合并分支
git merge branchName
merge分两种
1)fast-farword merge
master分支衍生出来的
2)non-fast-farword merge
三方合并分支
git checkout:还原工作区
git checkout --master.txt //用它来还原我们的工作区 用暂存区的内容覆盖工作区的内容
git reset:还原暂存区
当我们把工作区的内容用 git add .提交到暂存区后,我们可以使用git Reset fileName 命令来还原暂存区的内容,实例命令如下
git reset master.txt //输入此命令后,可以用git status 查看Git状态,发现已经没有差别了
git checkout INITIAL_COMMIT --master.txt //还原其他历史版本信 //INITIAL_COMMIT是一个版本的引用
git clean:清除没有跟踪的文件
git clean -n 查看我们没有跟踪和可移除的工作区内容,也就是将要被删除的内容
git clean -f 查看后我们可以下边的命令删除内容
git clean -n -x //用git clean 命令查看将要被移除.gitignore指定的不提交文件
git clean -X -f //用git clean -X -f 密令删除.gitignore,注意这里的X是大写的X
git revert :产生新的提交,覆盖以前的提交
git revert HEAD
git远程写作的主要命令
我们在学习远程仓库命令之前要先学会基本的Github操作,然后在Github上新建一个仓库。
我们先下载一个Github的桌面应用,下载地址为:http://desktop.github.com
下载后我们填写好用户名和密码,之后就可以用github的Git Shell来执行这些命令了
git clone:克隆远端仓库到本地
gi clone http://github.com/ypsc.git
git fetch:获取远端仓库的所有内容,包括所有分支内容
先进入本地仓库目录,然后用git fetch命令来获取远端仓库的所有内容。相当于是从远程获取最新版本到本地,不会自动merge
git fetch origin master
git log -p master .origin/master
git merge origin/master
首先从远程的origin的master主分支下载最新的版本到origin/master分支上,然后比较本地的master分支和origin/master分支的差别,最后进行合并。
git fetch origin master:tmp
git diff tmp
git merge tmp
从远端获取最新的版本到本地的tmp分支上,之后进行比较合并
git pull,是git fetch 和 git merge的操作合并
git pull origin master
上述命令其实相当于git fetch 和git merge,在实际使用中,git fetch更安全一些,因为在merge前,我们可以查看更新情况,然后再决定是否合并
git push:命令御用将本地分支的更新,推送到远程仓库主机上。
git push <远程主机名><本地分之名>:<远程分支名>
分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push 是<本地分支>:<远程分支>.
如果省略本地分支名,则表示将本地分支推送与之存在“追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
git push origin daily
上面命令表示,将本地分daily分支推送到origin筑基的master分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定远程分支,因为这等同于推送一个空的本地分支到远程分支。
git push origin :daily == git push origin --delete daily
上面命令表示删除origin主机的master分支。
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略
git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。
如果当前分支只是一个追踪分支,那么主机名都可以省略
git push
如果我们想要推送一个tag的话,可以使用下边的命令:
git push --tags
用push删除远程分支
git push --delete origin feacher
本文摘自网上git命令大全。