读书人

(转)git 之5分钟教程

发布时间: 2012-07-15 20:11:38 作者: rapoo

(转)git 之五分钟教程

http://bbs.scmroad.com/viewthread.php?tid=1522&extra=page%3D2

git 之五分钟教程 - 基本术语(1) by Dieken这个命令并执行之,后者则是执行 git 命令,传入后面的 cmd 等参数,git 这个
程序在 exec-path 中寻找 git-cmd 并执行之,这个 exec-path 可以通过命令行
选项 --exec-path=XXX 或者 GIT_EXEC_PATH 环境变量设置,在安装 git 时它内部
也会保存一个缺省的 exec-path。这个路径列表的语法跟 PATH 一致。git 的这种
exec-path 机制能够让它很方便的加入更多的命令。

获取一个 git 命令的帮助可以用 man git-cmd 或者 git --help cmd 或者 git help cmd
或者 git cmd --help,这四种命令效果跟第一条一样。

(a)
git init-db
在当前目录下创建 git 库(.git)

(b)
echo hello > xxx
git add xxx
递归将 xxx 加入 git 控制中,执行完后文件已经被加入库中,index 也已更新,
这时 git diff 因为 index 跟 工作拷贝一致,所以没有差别。
// 其实就是用的 git-update-index,这个命令在更新 index 时也会立即把
// 文件写入库中,这点跟 SVN 的 add 不一样。

(c)
git commit
将 index 实例化为一个 tree,创建一个 commit,这个时候看.git/objects 下面
就有三个对象:blob xxx,一个 tree 和一个commit。

(d)
echo world >> xxx
git diff
比较 index 和 工作拷贝
git diff --cached
比较 index 和前一次提交对应的 tree,这就是 git commit 要提交的东西。
git diff HEAD
比较工作拷贝和前一次提交对应的 tree,这就是 git commit -a 要提交的东西。

(e)
git commit
因为 index 没有改变,而 commit 只是从 index 创建 tree,所以没有需要提交
的,提示用 git-update-index.
git update-index xxx
git commit
更新了 index,这下可以提交了, 如果是想提交 index 中所有修改过和删除了的
文件,这两步可以用 git commit -a(这个命令类似于在顶层目录执行?这个命令的参数语法比较怪异。--no-commit 是让 git 不要马上
提交,这样可以检查一下合并结果是否正确,由于这段时间主干上
没有修改,所以这个合并其实就是 fast forward,直接将
master 指向 test 分支的 HEAD,不会创建新的 commit。
// git pull 的行为有点古怪,不推荐使用。

如果不是 fast forward,可以用 git diff 检查一下然后再
git commit;如果合并后有冲突,git 会把冲突标记写入文件,
这个时候打开这个文件编辑之,解决冲突后用 git-update-index
更新 index,然后 git commit。

(i)
gitk --all
查看版本图。

(j)
git branch -D test
删除 test 分支。

(k)
git clone git://git.kernel.org/pub/scm/git/git.git
把 git 的开发库镜像到本地的 git 目录中。

(l)
cd git && git fetch
与 git 的开发库同步。不建议用 git pull,可以用 git fetch
和 git merge 的组合代替 git pull。

(m)
git status
查看工作拷贝中的修改情况

(n)
git show commit-ish
查看一个 commit。

(o)
git reset commit-ish
将当前 HEAD 指向 commit-ish 代表的 commit。
这个命令有三个选项:
--mixed? ???默认选项,调整 HEAD 并重置 index,保留工作拷贝中的修改,
? ?? ?? ?? ?修改过的文件需要再次 git-update-index 以更新 index。
--soft? ?? ?仅修改 HEAD。
--hard? ?? ?修改 HEAD,并将 index 和 工作拷贝的状态对应到 commit-ish
? ?? ?? ?? ?相应的 tree 上,这会丢失工作拷贝中的修改!

在 git-reset(1) 中有一些这个命令的使用场合说明,可以看看,常用的可能
是第一条:
git reset --soft HEAD^
撤销最近一次提交。

// 类似于 svn revert 的是 git checkout。

(p)
git revert commit-ish
撤销库里的某次提交,注意跟 svn revert 撤销工作拷贝的修改不一样。
如果是撤销最近的提交,最好用 git reset。

(q)
有点点类似于 svn info 的命令是:
cat .git/remotes/origin

还有一个 git-push(1), 比较的复杂,以及其它的许多许多命令,
比如格式化 patch,将 patch 通过邮件发送,从 mbox 中提取
patch,等等,这篇小文就不罗嗦了(我也不大会-_-b),可以参考手册。


* 参考资料
http://www.kernel.org/pub/software/scm/git/docs/
? ? 这个上面的 tutorial 和 Everyday Git 指向两篇很好的教程,此页的
FURTHER DOCUMENTATION 中提到的 Discussion 以及 Core tutorial 对了解
git 的内部机制很有帮助。

http://git.or.cz/gitwiki/GitLinks
? ? 很多 git 相关资料的链接。

http://linux.yyz.us/git-howto.html
? ? Kernel Hackers' Guide to git, 比较老的一篇教程了。

http://www.gelato.unsw.edu.au/archives/git/0512/13748.html
http://marc.theaimsgroup.com/?l=git&m=113402372012587&w=4
? ? git for the confused, 虽然有点老了,仍然强烈推荐。

读书人网 >其他相关

热点推荐