# git的使用 # Git是一个由林纳斯·托瓦兹为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件。需要注意的是和GNU Interactive Tools,一个类似Norton Commander界面的文件管理器相区分。 :zap: 注意: 在使用 git 的过程中,如果我们需要查看帮助信息,可以 man git 或者 git –help,如果查具体的命令的 help 信息,可以用类似于 git init –help 的语句来查看。 ``` git init ``` 当当前目录不是一个 git 库时,执行这个命令会把当前目录初始化一个 git 库。具体为在当前目录下新建一个 .git 的目录。 只有初始化了目录,才能进行后续操作。 如果我们从别的地方拷贝一个 .git 的目录到当前目录下,那就可以不执行 git init 的操作。 ``` git add ``` 这个操作通常是在 git init 操作或者修改了一个已有的 git 库以后执行。一般是直接 ``` git add . ``` 把当前所有文件加入到 git 库中。也可以用命令 ``` git add filename1 filename2 ``` 来添加单个文件。 ``` git commit ``` 这个命令是用于提交git修改的,命令格式为: git commit ,一般加上的选项有 -a。 执行这个命令之前最好先执行 git add .,把所有文件都添加进git库,以免有时新加文件后提交不上。 有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用–amend 选项重新提交: ``` $ git commit –amend -m”修改 提交 说明” ``` ``` git branch ``` 这个命令用于查看git分支。 常用操作有: ``` git branch -a 可以列出所有分支 git branch -D Branch-name 可以删除以 Branch-name 为名的分支 git branch Branch-name 可以添加一个以 Branch-name 为名的分支 git branch -m Branch-name1 Branch-name2 把 Branch-name1 分支修改为 Branch-name2 ``` ``` git checkout ``` 这个命令可以取出某个 commit 或者某个 branch。 ``` git checkout commit-name git checkout branch-name git checkout -- filename 这个操作会用上一次提交的 filename 文件覆盖现在的 filename 文件 ``` ``` git diff ``` 此命令用于查看代码的修改。常用语法有: ``` git diff --color 可以显示颜色,且显示出当前版本(未提交)和之前版本的代码差异 git diff commit1 commit2 filename 可以查看文件 filename 在 commit1 和 commit2两个分支的区别 git diff HEAD^ HEAD filename 可以查看文件filename 在当前已提交版本和上一个已提交版本的区别 ``` ``` git log ``` 显示git提交记录。 可以把后面添加上 branch 的名称,这样会列出该 branch 的提交记录。 ``` git tag ``` 养成打tag好习惯,给当前commit打一个tag,名称为 20101023_publish ,命令为: ``` $: git tag 20101023_publish ``` 加上-f覆盖原有的tag ``` $: git tag -f 20101023_publish ``` 显示所有的tag ``` $: git tag 20101015_publish 20101019_publish 20101021_publish ``` 删除tag ``` $: git tag -d 20101023_publish ``` tag要push上服务器,操作跟分支操作没有任何区别 ``` $: git push origin 20101023_publish # push 到服务器 $: git push origin :20101023_publish # 从服务器上删除 ``` :zap: 值得注意的是,如果tag名字和分支名字一样的时候,push需要指定refs的详细路径,因为分支和tag在git内部是这样表示的(只是引用),tag只存储所指向的那一次提交: ``` refs/tags/{tagnane} refs/heads/branches/{branchnane} ``` 所以要这样push相同名字的tag和分支 ``` $: git push origin refs/tags/product $: git push origin refs/heads/branches/product ``` 把所有的tag都push到服务器上 ``` $: git push origin --tags ``` ``` git clone ``` 克隆 git 库到当前目录。语法: git clone git-url (比如: git clone git@rd-server:sources/adduser.git ) 新创建 git 库也用这个命令,不过需要添加一个参数 git clone –bare git-url ,这样会只克隆 .git 目录。 ``` git merge ``` 这个命令需要在被合并的分支上操作。 假设需要把 branch1 merge 到 master 分支,执行: ``` git checkout master git merge branch1 ``` 这样就会把 branch1 merge 到 master 分支上。