1. git clone 地址
把远程仓库的东西克隆下来
在本地仓库里面可以得到一模一样的信息,
此时分支名为:origin/master,代表克隆的是远程仓库origin的master分支
2. git commit
原来:
提交之后:
origin/master远程分支不会动,本地的master分支会自己动
2.1 git checkout origin/master
把HEAD分支拿到origin/master上面(默认从当前所在分支拿)
检出到该分支
2.2 git commit
会从HEAD分支继续提交
3. git fetch
原来远程仓库有两个分支,我们本地里面两个克隆下来的分支还没有更新到最新
取最新
执行git fetch更新所有的远程分支
注意!!!!!!
只是更新了远程分支,我们界面看到的分支还在HEAD上,需要切换到远程分支才能看出变化。
4. git merge
现在是这种状态:远程仓库更新了,本地也更新了,两个不同步
执行git fetch
新开了一部分,抓取到了远程的最新分支
再执行git merge o/master
把o/master这个分支拽到HEAD上
把该分支合并到HEAD分支
现在合并好了。
5. git pull
git pull执行第四个知识点的git fetch 和git merge两步,一模一样的结果。
git pull = git fetch + git merge
所以git pull会自动取得远程仓库的最新分支并自动和本地分支合并。(远程仓库还没动,只是本地好了)
--------------------------------------------上面是远程仓库变化,更新本地仓库
--------------------------------------------下面是本地仓库变化,去更新远程仓库
6. git push
原本:
先git commit两次
git push
把本地变化都推过去
注意!!!!!!!!!
我们本地仓库o/master和远程仓库的master分支都自动更新了。
7. git rebase
远程仓库和本地仓库都做了更改,两边不一样了(远程仓库的master分支在c3,本地仓库的o/master分支在c1),这时候是不能够git push成功的
此时怎么办呢?必须强制把本地仓库更新到和远程仓库一样的状态
7.1 git fetch -> git merge o/master ->git push
就是第4点的内容,
- git fetch先把本地的o/master分支更到最新
- git merge o/master合并本地分支和远程分支
- git push 把本地仓库推送到远程
也可以直接看第5点,把git fetch 和git merge合在一起写成,git pull
然后git push。
7.2 git fetch -> git rebase o/master ->git push
- git fetch抓取新分支
- git rebase o/master
(git rebase o/master master应该是两个参数,master默认参数省略,意思是在o/master续上master)
把本地工作和新分支合并本地分支是没有变的,和merge不同的地方是merge形成了一个黏在一起的提交,rebase形成了一个新的提交。
注意!!!!
我们本地的master分支在新提交上。 - git push提交即可
7.3 git pull --rebase ->git push
和第4点、第5点、第7.1点一样,我们也可以把命令合在一起写
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase(相当于只指定是rebase合并,否则默认是merge合并)
8. git reset
撤回某次提交。
原本:
我们想撤回到c1状态(或者撤回到o/master分支)
git reset --hard c1(git reset --hard o/master)
(reset有三种选项,hard mixed soft可以看下图,表示撤回到哪里)
接着:
git checkout -b feature c2
检出到feature分支(在c2上新建的分支)
最后
git push
这些操作可以让我们造一个新分支把之前的提交放在新提交上面推送到远程仓库中。