[size=medium]下载地址:[url]http://itunes.apple.com/cn/app/sourcetree-git-hg/id411678673?mt=12[/url]
官方简介(翻译的不好凑合着看哈):
SourceTree可以让你摆脱复杂的命令行,通过方便的GUI来控制你的Mercurial和Git仓库。
浏览你的GitHub, Bitbucket, Kiln, 和 Atlassian Stash项目。
也可以跟Subversion服务器协作。
点击按钮即可完成提交、分支、合并等操作。
通过数据仓库书签来直观的组织你的项目。
友好的diffs视图,让你立即看到文件的更改。
支持快速查看,甚至是你的历史变更。
对行级别进行撤销或者stage/unstage 操作(辉郎注:stage是将代码从working tree 提交到index,index的代码可以commit到本地仓库,当然working tree也可以通过选择commit到本地仓库,见第二副图,这个不理解可以跳过)。
自动创建和应用补丁。
藏匿/搁置的支持,以及更多!
二、Git的基本概念
工作目录(working directory)
暂存区域(staging area)
本地仓库(local repo)
对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改
(modified)和已暂存(staged)。
已提交表示该文件已经被安全地保存在本地数据库中了
已修改表示修改了某个文件,但还没有提交保存
已暂存表示把已修改的文件放在下次提交时要保存的清单中
四、Git的基本操作-配置
/etc/gitconfig 对于所有用户使用的配置,git config --system操作该文件
~/.gitconfig 对于当前用户使用的配置,git config --global操作该文件
当前工作目录的.git/config,对于当前项目有效
git config --global user.name 'zhangsan'
git config --global user.emal 'zahangsan@feinno.com'
git config --global core.editor vim
# 命令别名
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --list
五、Git的基本操作-创建
git init
git init --bare 无工作目录,服务器版本一般这样操作
git clone
git clone ssh://git@192.168.199.61/~/nginx_ex.git nginx_ex
git支持多种协议,git/ssh/http/file
六、Git的基本操作-基本命令
1、基础命令
git add
添加到stage
git rm
从stage或者仓库删除并删除本地文件
git rm --cached从stage或者仓库删除但并不删除本地文件
git status 查看工作区状态
git diff比较差异
git commit提交更新
2、tag标签命令
分轻量级标签(lightweight)和带注释的标签(annotated)。
轻量级标签和分支类似,只是不能移动。带注释的标签是存储在仓库的一个独立对象,建
议使用带注释的标签
git tag
查看所有标签
git tag -l <pattern>
查看符合模式的标签
git show <tagname>
查看标签信息
git tag -a <tagname> -m <msg> <commit>
对于指定commit加带注释的标签git tag -a v0.1 -m 'basic structure‘
git tag –d <tagname>
删除标签
git push <remote-name><tagname>
git push <remote-name> <brance-name> --tags分享标签,推送到服务器
3、stash命令
在当前工作区比较凌乱,需要切换到其它分支,但不想提交现在的修改是可以使用stash功能。储藏修改过的被跟踪文件和暂存的变更,在某个时刻可以恢复到当前状态
git stash list 查看储藏列表
git stash apply 应用储藏但并未删除
git stash pop 应用储藏并删除
git stash drop 删除储藏
git stash branch 在储藏的基础上创建分支
4、Blame命令(责备命令)
git blame <filename>
查看文件的每行的修改信息,用于排查问题
git blame –L <sart>,<end>
查看指定范围的修改信息
七、Git的基本操作-祖父引用
在引用后面加^,为本次提交的父引用
^后加数字表示本次提交的第几父引用,只有在分支合并的时候有用
~也是本次提交的父引用
~后加数字n表示本地提交的往上回溯n代的父引用
例如:
HEAD~ <==> HEAD^
HEAD~2 <==> HEAD^^
八、Git的基本操作-撤销
git checkout -- <filename>
撤销已索引文件的修改
git commit --amend
修改最后一次的提交
其等价于
git reset –soft HEAD^
…do something…
git commit –c ORIG_HEAD
git reset命令进行撤销重置操作
--hard
重设 index和working directory,自从<commit>以来在working directory中的任何改变都被丢弃,并把HEAD指向<commit>。
--soft
index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。这个模式的效果是,执行完毕后,自从<commit>以来的所有改变都会显示在git status的"Changes to be committed"中
--mixed
仅reset index,但是不reset working directory。这个模式是默认模式,即当不显示告知git reset模式时,会使用mixed模式。这个模式的效果是,working directory中文件的修改都会被保留,不会丢弃,但是也不会被标记成"Changes to be committed",但是会打出什么还未被更新的报告。
回滚最近一次的提交
git reset --soft HEAD^
HEAD^指向HEAD之前最近的一次commit。
永久删除最后几个commit
git reset --hard HEAD~3
ps:不要担心,其实也能找到,通过git ref-log或者git log –g 查看引用日志就可以找到以前的记录
回滚pull
git reset --hard ORIG_HEAD
执行git reset|pull|merge 时,git会把老的HEAD拷贝到文件.git/ORIG_HEAD中,在命令中可以使用ORIG_HEAD引用这个commit
九、Git的基本操作-日志
git log -<n>
最近的几条日志
git log -- filename
查看文件的提交记录
git log --pretty=<format>
控制输出格式
git log –oneline
单行显示日志
等价于 git log –pretty=oneline –abbrev-commit
git log –graph
提供文本化图像的提交历史图
git log --since <date>
git log –unitl <date>
git <since>..<until>
git log origin/master..HEAD
在当前分支而不再远程分支的提交
使用--not或者^表示不希望提交被包含在指定的分支
git log refA..refB
git log refB ^refA
git log refB --not refA
三个点,被两个引用的任意一个包含但不是同时包含的提交
git log --left-right master...experiment
十、Git的基本操作-分支
git 分支就是指向某个commit对象的指针,实际上就是一个包含所指对象校验和(40个字符的SHA-1)的文件 。
可以参考 .git/refs 目录,查看所有的相关引用。
分支合并是git相对别的SCM提供的强大功能,对于git而已,创建分支的代价很小,强烈推荐使用。
git brance
列出分支
git brance –v
列出分支并包含最后一次提交的信息
git brance -a
列出所有分支,包含远程跟踪分支(远程跟踪分支为不可移动的,只有在与远程仓库发生操作时才可能移动)
git brance --merge
列出已合并的分支
git brance --no-merged
列出未被合并的分支
git brance <name>
添加分支
git brance -d <name>
删除已被合并的分支
git brance -D <name>
强制删除分支(不论是否合并)
git checkout <name>
切换到分支
git checkout -b <name> <start-point>
根据起始点新建分支并切换到分支
git merge <name>
合并分支
git rebase <name>
衍合分支
当发生冲突的时候,合并会被取消,需要手动解决冲突
git mergetool
git merge
寻找最近的共同祖先进行三方合并,合并产生新的commit对象,其有两个parent或者快速递进
git rebase
回到两个分支共同祖先,根据当前分支的历次commit对象,生成补丁文件,以基底分支的最后一次commit对象为出发点,逐步应用补丁文件,生成一个新的commit对象。
git rebase
能产生更整洁的提交历史。
十一、Git的基本操作-远程仓库
git remote -v
列出远程仓库
git remote add <name> <url>
添加远程仓库
git remote -v show <name>
查看远程仓库
git remote rm <name>
删除远程仓库
git remote rename <old> <new>
重命名远程仓库
git pull <remote-name>
从远程仓库获取更新并合并到当前分支
git fetch <remote-name>
从远程仓库获取更新但并不合并
git push <remote-name>
推送更新到远程仓库
git push <remote-name> <local brance>:<remote brance>
推送更新到远程仓库的指定分支
local brance
为空则删除远程分支
十二、Git的基本操作-GIt目录
decription :供GitWeb程序使用
branches : 新版不在使用该文件夹
config : 项目配置信息
info目录 : 项目忽略模式
hooks : 客户端或者服务器端钩子
HEAD :指向当前分支
index : 保存了暂存区域信息
objects目录 :所有数据内容
refs 目录:指向数据(分支)的提交对象的指针
十三、Git与SVN的不同之处
svn为集中化的版本控制,svn获取最新的版本或者提交更新,历史记录等信息每次都要连接中央版本库;
git为分布式的版本控制,git跟svn一样也可以有中央版本库,每个开发人员克隆原始的代码仓库,在连接不了中央服务器的情况下依然能进行本地操作;
git把文件内容按元数据存储,svn按文件名称存储;
svn分支就是备份所有项目文件到版本库中的另一个目录,速度慢而且合并起来复杂
git 分支就是指向某个commit对象的指针,实际上就是一个包含所指对象校验和(40个字符的SHA-1)的文件;
svn每次提交会把全局版本号加一,为连续的数字版本号;
git每次提交的生成一个SHA1的版本号,git识别简短的SHA1字符,只要大于4个字符且没有歧义就成;
git 的工作模式很多,svn只有集中式的工作模式。
[/size]
官方简介(翻译的不好凑合着看哈):
SourceTree可以让你摆脱复杂的命令行,通过方便的GUI来控制你的Mercurial和Git仓库。
浏览你的GitHub, Bitbucket, Kiln, 和 Atlassian Stash项目。
也可以跟Subversion服务器协作。
点击按钮即可完成提交、分支、合并等操作。
通过数据仓库书签来直观的组织你的项目。
友好的diffs视图,让你立即看到文件的更改。
支持快速查看,甚至是你的历史变更。
对行级别进行撤销或者stage/unstage 操作(辉郎注:stage是将代码从working tree 提交到index,index的代码可以commit到本地仓库,当然working tree也可以通过选择commit到本地仓库,见第二副图,这个不理解可以跳过)。
自动创建和应用补丁。
藏匿/搁置的支持,以及更多!
二、Git的基本概念
工作目录(working directory)
暂存区域(staging area)
本地仓库(local repo)
对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改
(modified)和已暂存(staged)。
已提交表示该文件已经被安全地保存在本地数据库中了
已修改表示修改了某个文件,但还没有提交保存
已暂存表示把已修改的文件放在下次提交时要保存的清单中
四、Git的基本操作-配置
/etc/gitconfig 对于所有用户使用的配置,git config --system操作该文件
~/.gitconfig 对于当前用户使用的配置,git config --global操作该文件
当前工作目录的.git/config,对于当前项目有效
git config --global user.name 'zhangsan'
git config --global user.emal 'zahangsan@feinno.com'
git config --global core.editor vim
# 命令别名
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --list
五、Git的基本操作-创建
git init
git init --bare 无工作目录,服务器版本一般这样操作
git clone
git clone ssh://git@192.168.199.61/~/nginx_ex.git nginx_ex
git支持多种协议,git/ssh/http/file
六、Git的基本操作-基本命令
1、基础命令
git add
添加到stage
git rm
从stage或者仓库删除并删除本地文件
git rm --cached从stage或者仓库删除但并不删除本地文件
git status 查看工作区状态
git diff比较差异
git commit提交更新
2、tag标签命令
分轻量级标签(lightweight)和带注释的标签(annotated)。
轻量级标签和分支类似,只是不能移动。带注释的标签是存储在仓库的一个独立对象,建
议使用带注释的标签
git tag
查看所有标签
git tag -l <pattern>
查看符合模式的标签
git show <tagname>
查看标签信息
git tag -a <tagname> -m <msg> <commit>
对于指定commit加带注释的标签git tag -a v0.1 -m 'basic structure‘
git tag –d <tagname>
删除标签
git push <remote-name><tagname>
git push <remote-name> <brance-name> --tags分享标签,推送到服务器
3、stash命令
在当前工作区比较凌乱,需要切换到其它分支,但不想提交现在的修改是可以使用stash功能。储藏修改过的被跟踪文件和暂存的变更,在某个时刻可以恢复到当前状态
git stash list 查看储藏列表
git stash apply 应用储藏但并未删除
git stash pop 应用储藏并删除
git stash drop 删除储藏
git stash branch 在储藏的基础上创建分支
4、Blame命令(责备命令)
git blame <filename>
查看文件的每行的修改信息,用于排查问题
git blame –L <sart>,<end>
查看指定范围的修改信息
七、Git的基本操作-祖父引用
在引用后面加^,为本次提交的父引用
^后加数字表示本次提交的第几父引用,只有在分支合并的时候有用
~也是本次提交的父引用
~后加数字n表示本地提交的往上回溯n代的父引用
例如:
HEAD~ <==> HEAD^
HEAD~2 <==> HEAD^^
八、Git的基本操作-撤销
git checkout -- <filename>
撤销已索引文件的修改
git commit --amend
修改最后一次的提交
其等价于
git reset –soft HEAD^
…do something…
git commit –c ORIG_HEAD
git reset命令进行撤销重置操作
--hard
重设 index和working directory,自从<commit>以来在working directory中的任何改变都被丢弃,并把HEAD指向<commit>。
--soft
index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。这个模式的效果是,执行完毕后,自从<commit>以来的所有改变都会显示在git status的"Changes to be committed"中
--mixed
仅reset index,但是不reset working directory。这个模式是默认模式,即当不显示告知git reset模式时,会使用mixed模式。这个模式的效果是,working directory中文件的修改都会被保留,不会丢弃,但是也不会被标记成"Changes to be committed",但是会打出什么还未被更新的报告。
回滚最近一次的提交
git reset --soft HEAD^
HEAD^指向HEAD之前最近的一次commit。
永久删除最后几个commit
git reset --hard HEAD~3
ps:不要担心,其实也能找到,通过git ref-log或者git log –g 查看引用日志就可以找到以前的记录
回滚pull
git reset --hard ORIG_HEAD
执行git reset|pull|merge 时,git会把老的HEAD拷贝到文件.git/ORIG_HEAD中,在命令中可以使用ORIG_HEAD引用这个commit
九、Git的基本操作-日志
git log -<n>
最近的几条日志
git log -- filename
查看文件的提交记录
git log --pretty=<format>
控制输出格式
git log –oneline
单行显示日志
等价于 git log –pretty=oneline –abbrev-commit
git log –graph
提供文本化图像的提交历史图
git log --since <date>
git log –unitl <date>
git <since>..<until>
git log origin/master..HEAD
在当前分支而不再远程分支的提交
使用--not或者^表示不希望提交被包含在指定的分支
git log refA..refB
git log refB ^refA
git log refB --not refA
三个点,被两个引用的任意一个包含但不是同时包含的提交
git log --left-right master...experiment
十、Git的基本操作-分支
git 分支就是指向某个commit对象的指针,实际上就是一个包含所指对象校验和(40个字符的SHA-1)的文件 。
可以参考 .git/refs 目录,查看所有的相关引用。
分支合并是git相对别的SCM提供的强大功能,对于git而已,创建分支的代价很小,强烈推荐使用。
git brance
列出分支
git brance –v
列出分支并包含最后一次提交的信息
git brance -a
列出所有分支,包含远程跟踪分支(远程跟踪分支为不可移动的,只有在与远程仓库发生操作时才可能移动)
git brance --merge
列出已合并的分支
git brance --no-merged
列出未被合并的分支
git brance <name>
添加分支
git brance -d <name>
删除已被合并的分支
git brance -D <name>
强制删除分支(不论是否合并)
git checkout <name>
切换到分支
git checkout -b <name> <start-point>
根据起始点新建分支并切换到分支
git merge <name>
合并分支
git rebase <name>
衍合分支
当发生冲突的时候,合并会被取消,需要手动解决冲突
git mergetool
git merge
寻找最近的共同祖先进行三方合并,合并产生新的commit对象,其有两个parent或者快速递进
git rebase
回到两个分支共同祖先,根据当前分支的历次commit对象,生成补丁文件,以基底分支的最后一次commit对象为出发点,逐步应用补丁文件,生成一个新的commit对象。
git rebase
能产生更整洁的提交历史。
十一、Git的基本操作-远程仓库
git remote -v
列出远程仓库
git remote add <name> <url>
添加远程仓库
git remote -v show <name>
查看远程仓库
git remote rm <name>
删除远程仓库
git remote rename <old> <new>
重命名远程仓库
git pull <remote-name>
从远程仓库获取更新并合并到当前分支
git fetch <remote-name>
从远程仓库获取更新但并不合并
git push <remote-name>
推送更新到远程仓库
git push <remote-name> <local brance>:<remote brance>
推送更新到远程仓库的指定分支
local brance
为空则删除远程分支
十二、Git的基本操作-GIt目录
decription :供GitWeb程序使用
branches : 新版不在使用该文件夹
config : 项目配置信息
info目录 : 项目忽略模式
hooks : 客户端或者服务器端钩子
HEAD :指向当前分支
index : 保存了暂存区域信息
objects目录 :所有数据内容
refs 目录:指向数据(分支)的提交对象的指针
十三、Git与SVN的不同之处
svn为集中化的版本控制,svn获取最新的版本或者提交更新,历史记录等信息每次都要连接中央版本库;
git为分布式的版本控制,git跟svn一样也可以有中央版本库,每个开发人员克隆原始的代码仓库,在连接不了中央服务器的情况下依然能进行本地操作;
git把文件内容按元数据存储,svn按文件名称存储;
svn分支就是备份所有项目文件到版本库中的另一个目录,速度慢而且合并起来复杂
git 分支就是指向某个commit对象的指针,实际上就是一个包含所指对象校验和(40个字符的SHA-1)的文件;
svn每次提交会把全局版本号加一,为连续的数字版本号;
git每次提交的生成一个SHA1的版本号,git识别简短的SHA1字符,只要大于4个字符且没有歧义就成;
git 的工作模式很多,svn只有集中式的工作模式。
[/size]