用了几次git了,一直没总结,还是不太熟。
下载和安装什么的就不说了。windows下推荐git和tortoise git。linux下的gitk貌似还不错。
0. 账号和设置(alias,颜色等)
git config --global user.name "linus-young"git config --global user.email "test@test.com"git config --global color.ui true # 开启全部颜色效果# 常用命令aliasgit config --global alias.ci commitgit config --global alias.st statusgit config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.ps push# 使用vim 作为默认编辑器git config --global core.editor vim# 如果你在windows下使用git或是你的队友中有人使用win,你可以用下面这行命令来解决line-ending的问题。git config --global core.autocrlf false # 自动将CRLF的结束符转换为LF的结束符图片最后一行有误,注意修改
当然,你也可以通过更改 ~/.gitconfig 文件来配置好你的git。
1.本地创建新仓库
创建新文件夹,打开终端执行
git init
这样就创建了一个新的git仓库
2.复制仓库
本地复制,创建一个本地仓库的克隆版本。
git clone /path/to/repository
将远端服务器上的仓库复制到本地,就跟下载差不多,如下例
git clone git@github.com:linus-young/depot.git
3.添加与提交
<pre name="code" class="plain">git add filename
git commit -m "代码提交信息"
但是经常会出现 deleted files not staged 的情况, 所以最方便的还是
git add -u 更新所有修改(包括 add 和 remove)
4.推送到远端服务器
在github上申请一个帐号,create a new repo, 创建之后其实github上有提示要执行哪些命令。注意两个邮箱需一致。
至于本地的配置详见http://blog.csdn.net/ylm23_24/article/details/8297362
在当前本地文件夹下执行:
git remote add origin git@github.com:linus-young/depot.git
git push origin master
第一行代码是确定添加到github的哪个仓库,作为第一次提交。
第二行是将本地的所有文件上传到远端服务器上。master是默认分支,可改为其他分支。本地创建的其他分支默认是不可见的
5.分支
master是默认的。在其他分支上进行开发,完成后再合并到主分支上,有利于多人共同开发。
在当前本地仓库新建一个分支test
git branch test
若此时运行
git branch
可以看到所有当前存在的分支
test
*master
切换到test分支
git checkout test
现在来随便更改一些文件,并且提交,然后切换到master
(edit file)
git commit -m "try branch"
git checkout master
切换之后你打开刚刚修改过的文件,神奇的是貌似这些文件都没有被修改过!!原因是你此时处于master分支,test分支里面所作的改动是不起作用的,不信的话可以用
git checkout test 然后看看文件是否被修改了
然后你可以修改master分支下的一些文件并且提交
(edit file)
git commit -m "i just edit some file on master"
然后我们来合并test分支上的改动到master下
git merge test
报错的话可以用git diff 查看冲突
然后提交
git add .
git commit -m "i have merged test to master"
gitk
gitk 可以用图形化的方式很清楚地显示改动
下面这行可以删除test分支:
git branch -d test
6. 撤销操作
git checkout -f
# 可放弃当前所有改动,恢复到上一次commit后的状态(即HEAD区),它不会影响到缓存区(Index)的改动,即操作了git add 命令的那些文件。
# 具有相同作用的一条命令是
git reset --hard HEAD
# 如果你仅仅只想放弃一个文件的改动,可用如下命令
git checkout -- filename
-- 的用途在于将其后面的整个字符串识别为filename,就算filename是 -f 也行。详细介绍请见
stackoverflow
是不是执行了git commit 之后就没法更改了呢,当然不会啊。
git log
git log --oneline # 仅在一行输出commit的 sha1-commit-id 和 提交信息
git reset --hard <sha1-commit-id>
git push origin +master
关于上面两个撤销提交的操作,stackoverflow上还有很多解决方法:
7.其他常见命令
git status 查看文件状态
git pull 相当于 git fetch + git merge, 从远程获取最新版本并合并到本地
参考资料:
git 入门(浅显易懂,值得收藏):http://rogerdudler.github.io/git-guide/index.zh.html
ProGit 中文版:https://github.com/progit/progit/tree/master/zh
但根据AndorChen所述,原作者没有继续维护,所以你也可以看下AndorChen重新组织翻译的:
https://github.com/AndorChen/progit-cn
git 官方文档:http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html
官方文档的部分译文:译文
高效利用github (阳志平):http://www.yangzhiping.com/tech/github.html
git reset:http://happycasts.net/episodes/34
codeschool 的 trygit:http://try.github.com/levels/1/challenges/1
学习git branch的在线小游戏: learnGitBranching