Git 基础知识

之前工作中一直用svn,虽然也在git上写一些代码,但也仅限于 add commit push 这几个命令,一直没有对git比较系统的学习,花了半天多时间,学习整理了一些自己觉得比较实用的东西,大部分都是摘抄,仅供自己学习备忘之用,完整系统的介绍可参见附录。

本地仓库

修改提交:

本地文件 -(git add  )-> 暂存区 -(git commit  )-> 本地仓库
本地仓库 -(git reset)-> 暂存区 -(git checkout)-> 本地文件
通过git commit --amend可以修改上一次提交
git show 可以查看最近一次提交修改内容 等价于 git log -n1 -p

分支:

查看分支:git branch    
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>

远程协作

1. 远程分支

远程分支无法在本地修改或移动,只有在你连接远程仓库时,才会更新。它记录上次连接远程仓库时各分支的位置。它相当于远程仓库各分支在本地仓库的一个指针,每个远程分支都对应某个远程仓库的某个分支。你可以在本地仓库为其关联本地分支,然后你在本地分支上的操作和提交(commit),都由本地仓库管理,直到你决定推送(push)本地分支的修改或拉取(pull)远程分支的更新,此时git才会和远程仓库通讯,并更新远程分支的位置。

在执行 git clone 时,git默认为你创建了本地master分支,并且关联到远程分支origin/master上。可以通过git checkout -b mybranch origin/remotebranch来创建一个mybranch本地分支并关联到origin/remotebranch远程分支。

2. 拉取远程分支

git fetch origin master

pull和fetch操作可以拉取远程仓库origin上的master分支的更新,并且更新origin/master的位置。pull会在拉取时会自动进行合并,而fetch只拉取本地没有的内容,而不会尝试合并。

如果省略远程分支名,调用 git pull(fetch) origin,那么将默认作用于当前本地分支所关联的远程分支,并且会更新远程仓库上的所有分支信息。比如,你上次pull之后,其它人在远程仓库origin上添加了dev分支,那么本次通过git pull(fetch) origin将得到一个新的origin/dev远程分支。注意,git此时不会为origin/dev分支创建关联的本地分支,这需要你手动创建:git checkout -b dev origin/devgit checkout --track origin/dev,这样便能在新的dev分支上工作。

3. 推送本地分支

git push origin localbranch : remotebranch

当执行push操作时,git尝试将本地的localbranch分支推送到远程仓库origin的remotebranch分支,如果origin/remotebranch已更新,则需要先pull。大多数情况下,我们只需要输入 git push origin localbranch即可,git会自动找到其对应的远程分支并执行推送。

如果localbranch为新创建的本地分支,还没有关联远程分支,那么git会在远程仓库上创建一个remotebranch分支,并与localbranch关联。如未指定remotebranch,则会创建一个分支名和本地分支一致的远程分支。

另外,通过 git push origin : remotebranch 可以删除远程仓库上的remotebranch分支。语法上可以理解为,推送了一个空分支给远程分支。

Git 参考:

1.Git Book中文版

2.廖学峰的Git教程

3. Git飞行规则