git的原理有些复杂,额也描述不清楚,有个git中文教程可以慢慢看。
http://gitbook.liuhui998.com/index.html,或者直接下个git中文教程
个人觉得git的思想很强大
工作中用到到git命令记录如下:
git clone [地址] [本地名称]
克隆一个仓库到本地。本地名称可以不填,不填时默认与远程仓库中同名
补充: git clone [地址] -b 远程分支名
这样是只clone一个远程分支到本地
git status
查看当前文件状态 ,
文件状态:未跟踪,已跟踪。
已跟踪又分为:已修改,已暂存
git add .
添加文件。从未跟踪状态到已跟踪状态,从已修改到已暂存
git commit
提交代码到本地,这里需要输入提交说明,默认用vim打开,不过可以改
还可以git commit -m "asjdflkj"这个是直接写入提交说明
分支的相关命令
这里在团队合作过程中,我觉得最好是要做什么事情之前先新建一个分支,这样会让自己的改动不影响主分支
git branch 分支名
创建分支。
git branch
查看当前分支(本地分支),前面有*号的为当前分支。可使用-r 查看远程分支,-a查看所有分支
git checkout 分支名
切换分支,默认是在master分支中。
git checkout -b 分支名
创建分支并切换到所建分支
远程分支
git push [远程名] [本地分支]:[远程分支]
这个命令有两种用法
第一种是推送本地分支到远程分支,可以用于分支的创建和推送
第二种是本地分支不指定用于删除远程分支,这个比较特殊,我理解为用一个空的本地分支替换掉远程分支
分支追踪
首先查看分支追踪状况
git remote show [远程名]
该命令会与服务器沟通,稍微有点慢,默认的只有master的相关信息
git branch --track [本地分支名][远程名]/[远程分支名]
用于创建一个与远程分支有追踪关系的本地分支,但是比较奇怪的地方是,在查看分支追踪情况时只有pull关联push没有
git checkout --track [远程名]/[远程分支名]
创建一个与远程分支同名的本地分支并跟踪,并且切换到该分支下。在查看分支追踪情况时这个pull和push都会关联
查看log
看命令行实在有点头大,所以就用可gitk图形化的log,挺方便的
20120515补充:
今天想把一套代码里的修改移植到另一套上,于是研究了下git format-patch,git am
git format-patch master
这个命令是把分支与master比较差异并生成patch,生成目录为执行命令目录
git format-patch -1
生成前一次提交patch,后面的参数还可以是 2.3.4...
git format-patch --root
从开始生成每次commit的patch。这个会连最初上传的那次也打patch,因为第一次初始代码非常多所以非常耗时,目前还没找到怎么去掉第一次
patch生成后,可以把批量的patch放在一个文件夹下
git am patch路径
这个是单个patch
git am 文件夹路径/*.patch
这个git会根据patch顺序合入代码
在合入patch过程中如果出现冲突,则何处暂停,此时需要手动解决
打开冲突文件,把提示中的冲突部分手动拷贝过去,保存
git add 冲突文件具体路径
告诉git已经解决冲突
git am --resolved
继续合入patch
如果没有再提示,就合入patch成功
还可以用git am --skip来跳过当前patch
用git am --abort停止 在git am之初建议用一些,防止有没有合完的patch
在产生冲突时还可以执行:
git apply --reject patch路径
先合并没有产生冲突的文件,根据同目录下的*.rej文件找出冲突地方,并手动解决
20120816补充
今天遇到一个问题,需要把已提交到服务器的代码恢复到某一个节点
git reset --hard commit_id
git push origin HEAD --force
这样就把服务器的代码恢复到指定的节点
先记到这里,目前我只用过这么多了,其他用过后再添加(其中的部分说明是我自己的理解,如果有错欢迎指正)