基本上用git的时候都是自己的项目用,曾经呆过的那家公司还停留在古老的SVN(貌似现在很多公司都还是...),现在的公司用的是hg。对于git这玩意儿的使用一直都是停留在简单的半路出家野路子上,很多时候出问题基本都是纠结半天,趁着这几天公司没啥事儿,赶紧整理下...

初始化

git init

检出仓库

git clone \path\to\repository //从本地仓库检出
git clone username@host:/path/to/repository//通用用户名从远端仓库检出
git clone \path\to\repository -b branch_name //从远端仓库克隆出branch_name的分支

添加文件进暂存区

git add abc.txt //添加abc.txt到暂存区
git add a.txt b.txt //一次性添加a.txt,b.txt到暂存区
git add * //当前文件夹下所有文件到暂存区
git add --all // 将当前所有没有被加入版本库的文件加入暂存区

将文件从暂存区撤出

git checkout -- abc.txt //将abc.txt从暂存区撤出
git reset --mixed  //将所有提交到暂存区的记录从暂存区撤出,git reset也可以

从暂存区提交文件到仓库

git commit -m 'commit abc.txt'

推送到远端仓库

git push origin master //把本地的master分支推送到origin仓库的master分支,该命令全写为git push origin master:master,前面一个master为本地分支,后面一个master为远端分支

将本地仓库更新到最新

git pull //在工作目录中获取(fetch)并合并(merge)远端的改动
git pull -f --all //第一次clone下来只有master分支(默认),此命令将克隆所有分支下来
git pull origin master // 将origin远端仓库的master的最新数据拉取回本地并且合并到本地的master分支,该命令全写为git pull origin master:master,第一个master为远端分支,第二个master为本地分支

从仓库中回退

git reset --hard HEAD^ //回退会上上次HEAD^^,上上上次HEAD^^^,超级多次(比如100次)HEAD~100
git reset --soft HEAD^ //当commit后撤回本次commit,将其放回暂存区

创建分支

git checkout -b branch_dev //创建branch_dev分支并切换到branch_dev分支
git checkout --track origin/branch_dev // 将远端origin仓库的branch_dev分支checkout到本地并且新建一个branch_dev分支,该命令主要用于当我们执行fetch操作后如果需要将远端的branch_dev分支checkout到本地并且分支名也叫做branch_dev时使用

切换分支

git checkout master //切换到主分支

删除分支

git branch -D branch_dev //删除本地的branch_dev分支,该命令不会删除远端仓库的branch_dev

从远端仓库拉取分支

git fetch origin //从origin仓库fetch最新代码
git checkout -b develop origin/develop //讲远端origin仓库中的develop分支拉取到本地的develop分支

将分支推送到远端仓库

git push origin branch_dev //将分支branch_dev推送到远端

删除远端仓库分支

git push origin :develop //将远程的develop分支删除(黑科技哟)

合并其它分支到当分支

git merge branch_another //将分支branch_another与当前分支合并

查看分支之间的区别

git diff <source_branch> <target_branch>

发布标签

git tag beta1.0 1b2e3d4e5f //创建beta1.0的标签,1b2e3d4e5f是指要标记ID的前10位字符

tips:

  1. 当在团队开发的时候,比如说你在自己的一个开发分支正愉快地敲着代码,这个时候如果你的队友蹦蹦跳跳地过来告诉你,嘿哥们儿,合下我的主干分支,....代码我还没写完呢,不想commit一下然后在checkout到自己的主干分支去merge同事的代码啊...没关系,可以在你正在开发的分支上git stash一下,如果这个时候你git status一下就会发现这个正在开发的分支一下就干净了,你就可以checkout到自己的主干分支上去fetch同事的仓库,然后merge,然后checkout回自己的主干分支,好了,重点来了,这个时候你再git stash apply或者git stash pop一下,当当当当,你又可以愉快地继续刚刚没有完成的代码啦~~~~