查看远程分支:
git branch -a
删除远程分支
git push origin --delete <branchName>
查看当前分支状态
git status
切换分支
git checkout
本地分支的创建本地分支的来源为执行git checkout -b <branch name> 的那个分支
例如现在有两个分支,master和b1
master 分支下有一个commit:
commit1: add test1.c
b1分支下有两个commit:
commit2: add test2.c
commit1: add test1.c
如果在master分支下checkout,即:
git checkout master //进入master分支
git checkout -b frommaster //以master为源创建分支frommaster
git log后发现frommaster中有一个提交:
commit1: add test1.c
这说明他是从master分支为源头创建的
如果在b1分支下checkout,即:
git checkout b1 //进入master分支
git checkout -b fromb1 //以b1为源创建分支fromb1
git log后发现fromb1中已经有两个提交:
commit2: add test2.c
commit1: add test1.c
这说明他是从b1分支为源头创建的
远程分支的创建
从远程分支检出的本地分支,称为跟踪分支(tracking branch)。跟踪分支是一种和远程
分支有直接联系的本地分支。在跟踪分支里输入git push,Git 会自行推断应该向哪个服
务器的哪个分支推送数据。反过来,在这些分支里运行git pull 会获取所有远程索引,并
把它们的数据都合并到本地分支中来.
$ git remote add origin ssh://git@dev.lemote.com/rt4ls.git
$ git push origin master
这两个操作是等价的,第二个操作的第一行的意思是添加一个标记,让origin指向ssh://git@dev.lemote.com /rt4ls.git,也就是说你操 作origin的时候,实际上就是在操作ssh://git@dev.lemote.com/rt4ls.git。origin在这里完全可以理解为后者 的别名。
需要说明的是,默认情况下这条语句等价于提交本地的master仓库到远程仓库,并作为远程的master分支。
我从master分支创建了一个issue5560分支,做了一些修改后,使用git push origin master提交,但是显示的结果却是'Everything up-to-date',发生问题的原因是git push origin master 在没有track远程分支的本地分支中默认提交的master分支,因为master分支默认指向了origin master 分支,这里要使用git push origin issue5560:master 就可以把issue5560推送到远程的master分支了。
如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。$ git push origin test:master // 提交本地test分支作为远程的master分支
$ git push origin test:test // 提交本地test分支作为远程的test分支
如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。
$ git push origin :test // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
1. 在提交的同时添加文件
Git要求你在提交最近一个变更集之前显式地将新跟踪的文件添加到仓库。 因此提交变更集的典型命令序列通常是这个样子:
%>git add .
%>git commit -m "Latest commit message"
为了节省预备步骤并将添加与提交文件的操作放到一起,可以使用-a标志:
%>git commit -a -m "Latest commit message"
然而,在许多情况下你不应该使用这种快捷方式。稍后在本文中我将演示至少一个例子来说明为什么。
2. 用Git别名来节省击键次数
跟许多流行的命令行工具一样,Git允许你将自己的用户设置保存到一个叫.gitconfig的配置文件。在这个文件中,典型的用法是定义你自己的名 字和e-mail地址,因为它们是你跟仓库交互有关的。但你也可以在这里定义别名以节省时间。比如, 我的.gitconfig文件就包含了这样一些常用命令的别名:
[alias]
st = status
co = checkout
cm = commit
pom = push origin master
如果你碰巧忘记了自己定义的别名,可以通过下面这个命令来快速查阅你的配置文件:
%>git config -l
3. 选择性暂存文件
有时候你可能同时在多个文件说做了改动,但只想在即将进行的一次提交中选择性地添加一部分。为了达到这个目的你可以使用交互式添加功能。比如,假设我创建了两个新文件:ShopController.php
和ForumController.php,但我只想添加前面那个。
这时候我可以通过给git add传递-i选项来启动交互式添加器:
%>git add -i
这里你将会碰到询问菜单,其中提供了几种选择:
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
通过选择 4
,你可以交互式地选择你想要添加的文件:
What now> 4
1: application/controllers/ForumController.php
2: application/controllers/ShopController.php
Add untracked>>
4. 用.gitignore忽略文件和目录
初始化一个新的Git仓库以后,最先要做的就是创建一个.gitignore文件。该文件的作用是过滤那些你Git仓库中不想被跟踪的文件和目录。 比如,当我在一个新的Zend框架项目上工作的时候,典型的做法是丢弃那些项目文档,网站图片,和来自仓库的notes.txt文件,也就意味着我 的.gitignore文件看起来是这么一副模样:
docs
public/images
notes.txt
5. 在提交列表中删除新添加的文件
在开发最热火朝天的时候,你可能忘记将一个新创建而不想包含到仓库的文件添加到.gitignore文件。你可以用rm命令从即将提交的变更列表 中删除这些文件(被称为未暂存文件):
%>git rm --cached schema-notes.txt
成为未暂存状态的时候,你就可以将该文件添加到.gitignore了,然后再重新做一次提交。
6. 查阅一个已提交文件的提交前内容
在当前版本中对一个文件作过修改以后,我常常需要检查一个文件早期版本的内容,但又不想真正恢复这个文件。你可以用show命令带上一个指向该文件 的参数来轻松完成这个事情:
%>git show HEAD^:application/controllers/AboutController.php
插入符号(^
)代表查看时需要回退的修订版的数目。因此上面这个例子会显示AboutController.php的上 一个修订版。如果你要查看3次修订之前的版本,就要使用3个插入符号,像这样:
%>git show HEAD^^^:application/controllers/AboutController.php
另外,你也可以使用提交的哈希值来引用文件。比如,如果你想查看5个修订版之前的AboutController.php文件的内容,你必须先执行 git log来查看提交的哈希值,然后使用哈希值的前5个字符来获取文件内容:
%>git show 23aa985:application/controllers/AboutController.php
7. 编辑最近一次提交的日志消息
我是一个对拼写一丝不苟的人,但是在比较匆忙地提交最新变更集的时候消息中偶尔会多出一两个不想要的字母。你可以很容易地用amend命令编辑最近 一次提交的消息:
%>git commit --amend
执行这个命令会讲最近的提交消息加载到编辑器中,你可以编辑并保存这些消息。
8. 存储未提交的变更
编程工作的偶然中断是不可避免的,这常常会导致你处于这么样一个位置:尚不到可以提交变更的状态,而又必须立即修复并提交一个跟当前工作无关的问题。你可以用stash命令一股脑地保存下当前的所有变更,同时将你的基础逆转到之前的那个提交点,这时候你就可以修改并进行新的提交。一旦完成,你可以回到你存储的状态。比如,假设我正在一个项目的README文件的一个新区段上工作,突然发现了一个很严重的拼写错误。我可以这样来存储我的当前变更:
%>git stash save
重新打开README,我将会发现那个新的区段消失了,因为我已经回到了上一个提交点。这时候我可以修复那个拼写错误并 提交变更。然后再执行下面这个命令回到我的原始状态:
%>git stash pop
9. 浏览你的仓库
有很少的几种基于Web的界面可以用来浏览Git仓库,但是你知不知道一个叫instaweb的东东已经集成到了本地发布里面?要在浏览器里面阅读你的代码仓库,执行下面这个命令即可:
%>git instaweb --httpd apache2
将apache2传递给
--httpd开关会告诉Git使用运行在本机的Apache作为Web服务器。
虽然也支持几种其他的服务器,但默认使用的是lighthttpd。
10. 责备其他人
偶尔可能发生一个团队成员(当然不是你自己)引入一些未经测试的代码到仓库里而破坏构建的事情。自然,你想要将该问题归咎到某个人。但是谁引入了这个错误呢?可以用blame命令来查找:
%>git blame application/controllers/AboutController.php
23aa9852 (Jason Gilmore 2010-06-03 12:34:04 -0400 11) public function indexAction()
23aa9852 (Jason Gilmore 2010-06-03 12:34:04 -0400 12) { 0e9e9f49 (Jason Gilmore 2010-06-03 13:32:47 -0400 13)
echo "Missing semicolon" 23aa9852 (Jason Gilmore 2010-06-03 12:34:04 -0400 14) }