git 常用命令

来源:互联网 发布:中国网络菜市场 编辑:程序博客网 时间:2024/06/07 08:58

git 安装

以centos 为例

先安装依赖包

$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gccperl-ExtUtils-MakeMaker

下载git安装包,三部曲完成安装

$ wget https://github.com/git/git/archive/v2.3.0.zip$ unzip v2.3.0.zip$ cd git-2.3.0make configure$ ./configure --prefix=/usr$ make all doc info$ sudo make install install-doc install-html install-info

安装完成后,git –version 查看安装是否成功

默认安装git 没有命令补全功能, 需要另外安装completion文件

wget https://github.com/markgandolfo/git-bash-completion.gitcp git-completion.bash ~/.git-completion.bashsource ~/.git-completion.bash修改~/.profile 增加 source ~/.git-completion.bash

git 设置

$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"

创建版本库

git init

当前目录下创建工作目录,会产生.git的目录,下面包含了记录版本的历史信息文件; 可以在当前目录中进行git 操作,文件的增删改查、以及版本切换等; 但一般不作为仓库使用,因为工作目录容易因为他人的提交操作,导致混乱;

git –bare init

创建裸仓库作为远程仓库,仅生成包含提交版本历史记录信息的.git目录,其他人可以往上面提交版本,而不会产生混乱;

文件配置

工程中可能某些文件不想加入git监控,可以通过配置gitignore文件,分为全局和局部两种:

全局:
通过修改全局配置 git config 中的 excludesfile 指定全局忽略文件。设置方法:

$ git config --global core.excludesfile ~/.gitignore

局部
忽略文件默认为当前目录的 .gitignore ,但它只作用于当前目录下。上面说到,在全局的 .gitignore 文件中添加 .o 会忽略所有目录下产生的 .o 文件,但在当前目录下的 .gitignore 中添加 .o 却只能忽略当前目录下的 .o 文件。

版本操作

git版本管理 分三个区:工作区、暂存区、版本库

git status   查看工作区修改情况git add      将文件从工作区添加到暂存区git commit -m "comment"  将文件从暂存区提交到版本仓库中git diff 查看工作区文件与版本库文件的差异git log命令显示从最近到最远的提交日志git reflog  回退版本后看不到版本,可以看历史命令信息git reset 回退版本git checkout 回退修订

git status 查看仓库修改情况:

Changes not staged for commit: modified:   readme.txt

暂存区有修订没有提交到仓库

Changes to be committed:modified:   readme.txt

新增文件

# Untracked files:#   (use "git add <file>..." to include in what will be committed)##       LICENSE

git log命令显示从最近到最远的提交日志 git log –pretty=oneline
git不是以累加的版本号记录管理版本,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示

$ git log --pretty=oneline3628164fb26d48395383f8f31179f24e0882e1e0 append GPLea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributedcb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

git reset –hard HEAD^ 回退到上一个版本, 回到上一个版本后 git log将查看不到上一个版本信息,如果想回退可以 使用git reset –hard 3628164 前提是知道版本号

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向“append GPL”:

回退版本后如果没有版本号 可以使用git reflog查看命令历史记录

$ git reflogea34578 HEAD@{0}: reset: moving to HEAD^3628164 HEAD@{1}: commit: append GPLea34578 HEAD@{2}: commit: add distributedcb926e7 HEAD@{3}: commit (initial): wrote a readme file

提交后,用“git diff HEAD – readme.txt”命令可以查看工作区和版本库里面最新版本的区别:

$ git diff HEAD -- readme.txt 

Git会告诉你,git checkout – file可以丢弃工作区的修改:

$ git checkout -- readme.txt

命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

删除仓库中某个文件

$ git rm test.txtrm 'test.txt$ git commit -m "remove test.txt"

误删没有提交到仓库中可以使用git checkout恢复, 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

分支管理

Git鼓励大量使用分支,git分支控制命令:

git branch  查看分支  -a 所有分支, -r 远程分支,前面带 * 当前所在分支git branch name 创建分支git checkout name  切换分支git checkout -b name 创建+切换分支git merge name 合并某分支到当前分支,有冲突手工解决后提交git branch -d name 删除一个分支

查看分支历史

git log --graph --pretty=oneline --abbrev-commit

分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;、
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

当在dev开发过程中 报出已发布版本的bug, 但开发未完成不能提交代码,这时候又要创建临时分支来处理bug,想避免开发的数据丢失,可以使用git stash 保存现场信息

在branch 分支开发过程中,需要开发其他实验性功能, 又不想搞砸开发中的branch分支,可以在branch环境中 git checkout -b feature-name 创建并且复制branch分支信息,开发完后 同步到branch分支, git merge dev

远程操作

版本克隆

git clone <版本库地址>   

远程主机操作

git remote 列出所有远程主机名, -v 详细模式git remote show <主机名> 查看某个主机名信息git remote add 添加远程主机git remote rm 删除远程主机git remote rename <原主机名><新主机名>

更新

git fetch <远程主机名> <远程分支名>:<本地分支名> 

从远程获取最新版本到本地,不会自动merge,选择合并还需要用git fetch <主机名>/<远程分支名> 进行合并

git pull <远程主机名><远程分支名>:<本地分支名>  

从远程获取更新,并且自动合并;相当于git fetch + git merge;不写本地分支名,将合并到当前使用分支,不写远程分支名,将当前分支自动对应到远程分支中

推送

git push <远程主机名><本地分支名>:<远程分支名>

引用:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

0 0
原创粉丝点击