最近的项目管理用的是GIT,刚开始只是打算能用即可,没打算好好学习它。但是GIT的魅力很大啊,让人禁不住想多了解了解。时间有限,历史、背景、来源,都无需多说。我就把常常能碰到的应用场景列举一下,一方面分享给大家查阅,一方面自己备忘吧。我工作的环境是 Ubuntu, 虽然 Git 在多个平台都是可以使用的,但是仍然略有差别。
- 安装Git。当然从源码安装是可以的,开源项目嘛。
$ apt-get install git
- 克隆代码库。我的项目是托管在 bitbucket , 推荐一下,很好用。当然,没用过其他的 github, google code等等,所以也没有发言权了。这里的adress可以是代码托管的服务器地址,也可以是一个本地库的路径等等。
$ git clone address
- 设置用户名和邮件地址。很重要的步骤,这个信息会显示在你的提交信息上,这样团队才知道是谁提交的代码。
$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com
- 设置默认的merge工具。这个不是必须的,随后可以手动选择的。设置上会很方便,我一般就用meld了, meld需要额外安装。
$ git config --global merge.tool meld
- 查看git的设置信息。下面是查看git全局信息,比较常用的。第二条是查看具体某项配置的信息。
$ git config --list $ git config user.name
- 查看git命令的帮助信息。三种方式。
$ git help <verb> $ git <verb> --help $ man git-<verb>
- 在代码库目录下,查看代码状态。这个真心建议仔细看看,输出的信息很有讲究,需要实践以进一步学习。
$ git status
- 让git追踪一个新文件。正常创建的文件,需要先被git追踪,才能进而被git管理。第二条命令是对所有未追踪的文件添加追踪,容易track无用文件,慎用。
$ git add fileName $ git add -A
- 提交。-m不是必须的,但是最好加上,他让你能给本次提交添加comment。
git commit -m “”
- 查看不同。第一条是查看两个分支的区别。第二个是查看两次提交的区别。第三个是比较工作区和上次提交的差别。git diff 也是可以的,但是没有可视化工具,如meld,是很不直观的。
git difftool b1 b2 git difftool c1 c2
git difftool HEAD - 查看提交的历史。
$ git log $ git log -p -2 $ git log --since=2.weeks
git log通常就够用,后面的是加一些限定条件的,有许多限定条件可用,如果你需要的话。
- 修改最后一次提交的状态。
git commit --amend -m "xxx"
如果你刚刚提交了,但是漏掉了一个文件,又不想再提交一次。那么用这条指令,相当与修改了你最后一次提交,并且会覆盖掉你最后提交的信息,显示一次提交。
- unstage一个已经stage的文件。
git reset HEAD fileName
说白了,就是某个文件我add了,但是我由不想提交了,怎么办?执行这个。
- 还原修改过的文件。
git checkout -- <file>
一个文件我改了,然后我又不想要这个改动了,还原回去用这个命令。
- 给git的命令起别名。
git config --global alias.br branch
这个绝对好用有木有,有的命令太长,好了,设置简单的别名即可啊。这只是个简单的例子,更多精彩查阅文档。
- 把提交push到代码库。
git push origin branch
虽然你commit了,但那是在你的本地,如果想要把你的提交同步到服务器,那么需要git push 命令。branch是你打算push到的远程分支名字。
- 追踪远程分支。
$ git checkout -b serverfix origin/serverfix
创建本地分支 serverfix 来追踪 远程的分支 origin/serverifx.
- 更新代码库。
$ git pull origin
我知道这个方法不是最安全的,因为git pull命令会自动merge,但是我不得不说,这个是我最常用的,他会把远程代码库的更新pull到你本地。并且自动merge当前分支。
- 还原当前分支到某次提交。
$ git reset --hard ”commit md5“ $ git reset --soft ”commit md5“
--hard 和 --soft的区别在于,前者会彻底覆盖掉你本地未提交的修改,而后者会保留你的修改。commit md5 是你执行 git log 时,看到的commit的md5值。
- 合并分支。
$ git merge branch1
把branch1分支合并到当前分支。有可能很顺利,也有可能会发生冲突,仔细看提示信息,再提交!
- 手动解决冲突。
$ git mergetool
如果合并分支的时候冲突了,用这个命令手动解决。这是常有的事儿。
- 创建分支。
$ git branch -b "branch1"
创建一个叫“branch1”的分支。
- 删除本地分支。
$ git branch -d "branch1"
- 切换分支。
$ git checkout branch1
切换到branch1分支。
- 删除远程分支。
$ git push origin :branch1
删除远程的branch1分支。
一个好的 git 网站, http://gitready.com/
暂时想到这些吧,以后想到了再补充。我相信你会用了这些,就可以完成基本的代码库管理了。另外,git是很有意思的一个东西,与其他的版本控制系统(VCS)很不一样,如果想要深入学习,还有很长的路要走。这里推荐一本电子书,《Pro Git - Scott Chacon.pdf》,简单而全面,很容易看懂。谢谢!