工作区 < - 缓冲区 <- 版本库
提交代码的更改一共分2个阶段。
- 1.从工作目录,提交到stage。
- 2.从stage提交到master。
从工作目录提交到stage,需要用add或者rm命令,只提交到stage,而没有提交到master,是不会自动同步到master的。
从stage提交到master用commit命令。
两种回退操作:
- 1.stage回退到工作目录, 是用来取消提交操作的;
- 2.master回退到工作目录, 是用来回滚操作的;
撤销修改
git checkout -- xxx
让这个文件回到最近一次git commit或git add时的状态。
git reset HEAD xxx
可以把暂存区的修改撤销掉
- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
- 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
- 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
git init 初始化仓库
git add 添加文件
git commit -m "描述" 上传文件
git status 查看状态
git dif 查看区别
git reset --hard HEAD^ 恢复到上一个版本
git reset --hard HEAD^^ 恢复到上上一个版本
git reset --hard HEAD~100 恢复到100之前的版本
git log #查看当前版本及之前版本的id 加--pretty=oneline简化显示
git log --pretty=oneline
git reflog #查看所有版本的id
git reset --hard xxx 根据git reflog得到的编号恢复到那个版本
删除文件
git rm xxx
git commit -m "remove test.txt"
删除错误要还原
git checkout -- xxx
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
已有的本地仓库与之关联
git remote add origin git@github.com:jianpingye/learngit.git
去除本地仓库与远程仓库的关联
git remote rm origin
git push -u origin master本地库的所有内容推送到远程库上 第一次
git push origin master本地库的所有内容推送到远程库上
git clone克隆一个本地库
git remote查看远程库的信息
git remote -v 显示更详细的信息
git push origin branch-name从本地推送分支
git checkout -b branch-name origin/branch-name在本地创建和远程分支对应的分支
git branch --set-upstream branch-name origin/branch-name建立本地分支和远程分支的关联
创建分支
git checkout -b dev git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev 创建分支
git checkout dev 却换分支
git branch命令查看当前分支
git merge命令用于合并指定分支到当前分支
git branch -d dev删除分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
强行删除:git branch -D <name>
分支冲突:合并时显示分支冲突先merge 后修改<<<<分支1 <<<<分支2 之间的冲突内容,然后在提交. 当前分支会比被合并的分支多commit一次
git log --graph --pretty=oneline --abbrev-commit #查看分支情况
git merge --no-ff <name> #禁用Fast forward,不删除分支,合并后保留分支
BUG分支:正在dev分支工作,需要修改bug并提交,应该先把dev当前工作区stash储藏起来.修改完bug提交后在使用 git stash pop恢复dev的内容到工作区.
git stash #储藏当前工作区
git stash list #查看
git stash apply <stashid> #恢复指定内容到工作区,不在stash内删除..stashid通过git stash list查询
git stash drop <stashid> #删除
git stash pop #恢复stash的内容到工作区,并在stash内删除
git tag <name>新建一个标签,默认为HEAD,也可以指定一个commit id;
建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
可以通过-s用私钥签名一个标签:
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
git tag可以查看所有标签。
git push origin <tagname>可以推送一个本地标签;
git push origin --tags可以推送全部未推送过的本地标签;
git tag -d <tagname>可以删除一个本地标签;
git push origin :refs/tags/<tagname>可以删除一个远程标签。
更新
git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git fetch origin master
git log -p master..origin/master
git merge origin/master
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
然后比较本地的master分支和origin/master分支的差别
最后进行合并
git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
网友评论