仓库与分支
克隆远程仓库: git clone <remote_url>,Clone之后会将远程仓库整个下载下来,并起名origin。另外会建立一个local的master分支(可以认为是把origin/master复制了一份),并与origin/master关联起来。记住,你的所有修改都是针对local branch。
查看远程仓库的信息: git remote -v
查看local branch: git branch
查看(已同步到本地的)remote branch: git branch -r,这些branch称为tracked remote branch,超前或落后都是针对这些branch。
同步远程仓库到本地: git fetch origin,会将远程服务器上的所有版本同步到本地的origin。当然也可以只同步远程服务器的某个分支。
创建分支:git checkout -b <branch_name>,即把当前分支复制一份到新的分支<branch_name>,并且换到新的分支上。
checkout远程分支:假设别人已经push了一个分支,而且你已经通过fetch同步过了,你想在该分支上工作怎么办?git checkout -b <branch_name> origin/<branch_name>。(对于支持pull request的系统,建议自己的branch改个名字,然后通过pull request合并到别人的分支上。)
merge某分支到当前分支: git merge <branch_name>。pull命令相当于fetch+merge,比如当前分支为master,git pull相当于 git fetch origin, git merge origin/master。
修改与提交
git的操作是针对change的,而不是针对文件的。工作区:已修改还未add的change。暂存区(stage或者叫index):已add还未commit的change。
添加修改与提交:git add <files>,git commit -m "comment"
撤销修改:git checkout -- <file>,或者要回到某个版本号git checkout <commit_id> <file>,是要回到的版本号。但是该命令对已经add的文件无效。
撤销add:git reset <file>
丢弃所有文件的修改,而不用一个个去撤销:git stash save --keep-index,然后git stash drop。
补充提交:git commit --amend。即上次的commit还没有同步到远程,想在里面再改点东西,而不愿再创建一个commit。
将本地版本同步到远程:git push --set-upstream origin <local_branch>。会同时同步到远程服务器和远程服务器的本地镜像(origin)。这是第一次同步,--set-upstream origin,表示将<local_branch>关联到origin的同名branch。一旦关联建立,就只需git push。
Stash
将所有未commit的修改存入stash:git stash
这时就可以切换到别的分支工作,回来之后,git stash pop,就可以复原了。stash里面其实可以存多个版本,git stash list就可以看到所有的stash,存入stash的时候还可以起个名字。
参考资料
Git远程操作详解,来自阮一峰的博客,对clone,remote,fetch,pull,push讲解的很好。
廖雪峰的Git教程,号称史上最浅显易懂的git教程