git 使用总结(一)

到目前为止,总共接触使用git两年多吧,中间并没有一直用,因为中间做的项目比较少,有时候又是用的SVN,就像公司目前就是一直在用SVN,不过有转到git的趋势,我自己一直都是用git,使用灵活并且方便,简单总结一下吧。

git 是一个分布式版本控制系统( Distributed Version Control System,简称 DVCS )

git 和其他集中化的版本控制系统( Centralized Version Control Systems,简称 CVCS )的主要差别在于,git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。在 git 中的绝大多数操作都只需要访问本地文件和资源,不用连网,所以速度非常快。

基本安装及操作(ubuntu):

$ apt-get install git


配置的是个人的用户名称和电子邮件地址,这两条配置很重要,每次 Git 提交
时都会引用这两条信息,说明是谁提交了更新

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

查看配置:

$ git config --list

常用的命令有:
初始化:
在某个目录下使用

$ git init

将该文件夹初始化为git仓库,初始化后,在当前目录下会出现一个名为 .git 的目录

有时候不需要自己创建仓库,而是从已有仓库clone:

$ git clone git://github.com/username/gitname.git newname


上面的newname表示如果希望在克隆的时自己定义项目目录名称,可以在的命令末尾指定新的名字,不写的

话默认为原来仓库的名字

将文件或者文件夹加入版本控制:

$ git add filename

取消已经暂存的文件:

$ git reset HEAD filename

取消对某个文件的修改:(如果你修改提交后,觉得没必要修改)

$ git checkout -- filename

查看git仓库
 

$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
nothing added to commit but untracked files present (use "git add" to track)

提交:

$ git commit -m 'initial' #记得加上注释

直接提交(跳过暂存)

$ git commit -a -m 'commit directly' #也可以-am

忽略某些文件:
创建一个名为.gitignore 的文件,列出要忽略的文件,例如:

$ vi .gitignore
*.log #忽略.log结尾的文件
!error.log #error.log 除外(即不忽略)
aclegend/ # 忽略aclegend/ 目录下的所有文件
aclegend/*.cpp # 会忽略aclegend/目录下的以.cpp结尾的,但不包括aclegend/ 子目录下的文件

查看还未暂存的文件更新了那些内容:

$git diff

删除文件:

$ git rm  filename

删除修改过并且已经放到暂存区域的文件,要用强制删除选项-f

把文件从 Git 仓库中删除:

$ git rm --cached filename

移动文件:

$ git mv file1 file1

用这个命令也可以进行重命名

查看提交历史:

$ git log #此命令可以使用 -p 选项展开显示每次提交的内容差异,用-n 则仅显示最近的n次更新

比如:

$ git log -p -5

修改最后一次提交:(提交完了才发提交错了)

$ git commit --amend

关于远程仓库的操作:
如果克隆完某个项目后,就至少可以看到一个名为 origin 的远程仓库,git用这个名字来标识克隆的原始仓库

查看当前远程仓库:

$ git remote -v # -v 选项(--verbose的简写),表示显示对应的克隆地址,也可以不加

添加远程仓库:

$ git remote add name url # name 是仓库名字(可自定义),url是仓库地址

从远程仓库抓取数据:

$ git fetch  name #name 是仓库名字
$ git pull name #name 是仓库名字

fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支
pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支

推送数据到远程仓库

$ git push [remote-name] [branch-name]

如果使用

$ git push

相当于如下命令:

$ git push origin master

查看远程仓库信息

$ git remote show origin

git 命令设置别名:

$ git config --global alias.cmt commit

将commit命令别名设为cmt
同时可以用这种方式自己创造一些命令