git指南

基本操作

//拉取远端分支到本地分支:

git pull origin <remote_branch>

//push本地分支到远端分支:

git push origin <local_branch>:<remote_branch>

//提交改动到本地分支:

git commit -am "comments"

//新建branch,基于当前branch

git branch <branch_name>

//从远端分支拉取创建本地分支:

git checkout -b <local_branch> origin/<remote_branch>

//回退到某一个版本,如果不指定<commit>,默认就是HEAD

git reset --soft <commit>   撤销commit,保留workingtree、index file

git reset --mixed <commit>  撤销commit、index file,保留working tree

git reset --hard <commit>   撤销commit、index file、working tree

//放弃当前所做的所有更改:

git reset --hard


diff的用法

working tree:工作目录,就是当前操作的源代码文件。

index file:索引文件,它是连接working tree和commit的桥梁,当使用git -add命令来登记后,index file的内容就改变了,此时index file就和working tree同步了。

需要注意的是,在add过之后所做的改动,需要再次add之后才能加入index file。

commit是最后的阶段,就是将index file里的内容提交到git仓库中。

总结一下:

git diff                   查看working tree与index file的差别。

git diff --cached  查看index file与git仓库的差别。

git diff HEAD       查看working tree和git仓库的差别。

//从index file中移除登记过的文件

git reset --mixed <file1> <file2>

//将working tree恢复成index file的状态。

git checkout <file1> <file2>

//比较两个branch

diff <branch_A>..<branch_B>

 merge的用法

 //将<branch_name>分支merge到当前分支,--squash表示不需要merge<branch_name>分支所有的commit log

git merge --squash <branch_name>

当merge无法解决冲突的时候,它会给用户提供冲突信息,用户必须自己解决这些问题。

未发生冲突的代码已经被添加到index file里了。如果你这个时候使用git diff,显示出来的只是发生冲突的信息。

在解决冲突之前,如果使用git commit提交的话,git会提示:

<filename> needs merge

在发生冲突的时候,如果使用git status命令,会显示发生冲突的具体信息。

在解决了冲突之后,可以使用如下步骤来提交:

第一步:git add <filename>

第二步:git commit


patch的用法

//创建当前分支和<branch_name>分支的patch

git format-patch <branch_name> --stdout > ~/review.patch


git的提示信息

如果git提示说“changed but not updated”,表示在working tree已经做修改,但还没有使用git add登记到index file里。

如果git提示说“Changes to be committed”,表示已经存在于index file里,但尚未git commit提交。

如果git提示说“Untracked files”,那么就是你增加了新文件。

HEAD:表示最近一次的commit。

HEAD^:表示HEAD父母的信息

HEAD^^:表示HEAD父母的父母的信息

HEAD~4:表示HEAD上溯四代的信息

MERGE_HEAD:如果是merge产生的commit,那么它表示除HEAD之外的另一个父母分支。


配置图形化diff工具meld :

安装:sudo apt-get meld

配置为git的diff工具:

git config --global diff.external meld

之后进行diff操作,meld 会被调用,但是会出现错误"Wrong number of arguments (Got 7)"。原因是git 会传递7 个参数给meld ,但是meld 只需要两个参数,所以必须要做一点小修改,在用户目录下建立一个git-meld.sh 的script:

vi ~/git-meld.sh

加入以下内容:

#!/bin/sh

meld $2 $5

改变git-meld.sh的属性:

chmod 777 ~/git-meld.sh

最后重新设定:

git config --global diff.external~/git-meld.sh

搞定!


.gitconfig的配置

可以修改用户目录下的.gitconfig文件,自定义git命令,少敲几个字符,懒人的最爱,而且还有一些其它的有空配置:

[user]

         name= edisonlg

         email= edisonlg@gmail.com

[color]

         ui= auto

         status= auto

         branch= auto

[diff]

         external= /home/ligang/bin/git-meld.sh

[alias]

         co= checkout

         ci= commit -am

         st= status

         br= branch

         onedaylog= log --pretty=oneline --since='1 day ago'

         twodaylog= log --pretty=oneline --since='2 days ago'

         oneweeklog= log --pretty=oneline --since='1 week ago'

         patch4review = diff HEAD > ~/review.patch

.gitignore的配置

.gitignore即可以放在当前的工程目录,只针对当前的工程有效,也可以通过下面的方法配置一个全局的设置:

可以修改用户目录下的.gitignore文件,来添加不需要git进行版本管理的文件:

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

实际上执行上述命令之后,可以在~/.gitconfig文件中发现多了下面一行:

[core]
excludesfile = /home/ligang/.gitignore

.gitignore的语法使用标准的glob模式匹配。

#为注释行

斜杆/结尾的字符,被当做文件夹处理,文件夹下的所有文件将被忽略。

glob语法

               *               [abcd]                    ?                   [0-9a-zA-Z]               \
匹配任意字符 匹配多种可能 匹配单个字符 匹配一个范围 转义字符

例如,我们使用Eclipse时,会产生很多工程文件,不需要git进行版本控制,.gitignore的内容就如下:

======================

.classpath
.project
.settings
bin  # bin文件夹下都忽略
gen  # gen文件夹下都忽略
project.properties
default.properties

=====================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值