命令注解
- add
跟踪文件或者将已修改过的文件放至暂存区
git add <file>
:暂存file文件
git add --a
:暂存所有改动 - commit命令:提交暂存区文件
- add之后的文件属于已暂存(staged)状态。commit之后属于已提交(committed)状态
- 从跟踪清单中删除(也就是不跟踪)
$ git rm –cached readme.txt
fetch
- 如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。所以,git fetch origin 会抓取从你上 次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。
- fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支
- 比如如果远端仓库上新建了一个分支serverfix ,本地仓库上并不会自动增加serverfix 分支,而是只有一个你无法移动的 origin/serverfix 指针)
pull
- 自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支
- 如果设置了某个分支用于跟踪某个远端仓库的分支(参见下节及第三章的内容),可以使用git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。在日常工作中我们经常这么用,既快且好。实际上,默认情况下git clone 命令本质上就是自动创建了本地的master 分支用于跟踪远程仓库中的master 分支(假设远程仓库确实有master 分支)。所以一般我们运行git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中当前分支。
push
- $ git push origin serverfix
意为“取 出我的 serverfix 本地分支,推送它来更新远程仓库的 serverfix 分支” - git push origin serverfix:serferfix
意为“提取我的 serverfix 并更新到远程仓库的 serverfix” - 只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。如果在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,并到自己的项目中,然后才可以再次推送
clone,fetch,pull的差别
- clone:完整的复制,从无到有的时候使用
- fetch:将远端仓库的信息同步(只是信息)
- pull:拉取远端分支内容并merge到本地分支
查看比较
- git status:查看文件状态
- 比较差异
未暂存内容的比较:git diff
已暂存内容的比较:git diff –staged
关于远端仓库
- 仓库指明方式(rainyslr的studycpp仓库为例)
- http
https://github.com/rainyslr/studycpp.git
使用该种方式指定origin时,每一次提交都需要输入用户名和密码 - ssh
git@github.com:rainyslr/studycpp.git
该种方式无需输入用户名和密码
- http
- origin:clone时自动将远端仓库的命名为origin
- 添加远端仓库
git remote add 远端仓库的本地别名 仓库地址
分支操作
查看本地分支
git baranch
当前工作分支前会有一个星号)
查看所有分支
git baranch -a
当前工作分支前会有一个星号)
创建本地分支
git branch 新分支名字
或者git checkout -b 新分支名字
特别注意:这两个命令是在当前分支的基础上创建新的本地分支。如果当前分支为a,远端仓库上有a分支和b分支,那么使用git branch b
命令之后本地的b分支是与本地分支a相同,而非与远端b分支相同。若要与远端b分支相同,应该跟踪远端b分支(详见后文)
切换分支
checkout 目标分支名
合并分支
git checkout master
git merge iss53
将iss53合并至master(当前工作分支为master)
查看已(未)合并到当前分支的分支
git branch --merged
git branch --no-merged
remote show 远端仓库名
显示该仓库中哪些分支已经被跟踪,以及为pull配置的本地分支,为push配置的本地引用
跟踪分支
从远程分支检出的本地分支,称为跟踪分支(tracking branch)。跟踪分支是一种和远程分支有直接联系的 本地分支。在跟踪分支里输入 git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据。反过来,在 这些分支里运行 git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。
git checkout -b [分支名] [远程名]/[分支名]
或者:git checkout --track origin/serverfix
删除远端分支
git push origin --delete new
删除本地分支
git branch -d 本地分支名
分支要点
- 未建立跟踪关系时,本地分支和远端分支没有任何关系,即使两个分支同名
恢复版本
git reset –hard