1.本地分支与远端分支的关联 为了解决git pull 和git push时提示 远程分支和本地分支名需要指定问题
// 已有本地分支创建关联
git branch --set-upstream-to origin/远程分支名 本地分支名
// 取消本地分支与远端分支的关联
git branch --unset-upstream 本地分支名
git push 命用于从将本地的分支版本上传到远程并合并。
命令格式如下:
git push <远程主机名> <本地分支名>:<远程分支名>
如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
实例
以下命令将本地的 master 分支推送到 origin 主机的 master 分支。
$ git push origin master
相等于:
$ git push origin master:master
设置git branch --set-upstream-to origin/secondbr secondbr (远程仓库分支。本地分支)后,再push 代码不需要 git push origin HAED:refs/for/secondbr
2.
- 工作区(workspace):本地电脑存放项目文件的地方,比如learnGitProject文件夹;
- 暂存区(Index/Stage):在使用git管理项目文件的时候,其本地的项目文件会多出一个.git的文件夹,将这个.git文件夹称之为版本库。其中.git文件夹中包含了两个部分,一个是暂存区(Index或者Stage),顾名思义就是暂时存放文件的地方,通常使用add命令将工作区的文件添加到暂存区里;
- 本地仓库(Repository):.git文件夹里还包括git自动创建的master分支,并且将HEAD指针指向master分支。使用commit命令可以将暂存区中的文件添加到本地仓库中;
- 远程仓库(Remote):不是在本地仓库中,项目代码在远程git服务器上,比如项目放在github上,就是一个远程仓库,通常使用clone命令将远程仓库拷贝到本地仓库中,开发后推送到远程仓库中即可;
3.
3.1先用 git branch -a 查看所有本地+远程分支
上方是本地分支区,下方origin一堆是远程分支;箭头指向的是当前本地分支、远程分支
4.
git branch -vv
显示local分支对应的远程分支
5.
五、回退版本(时光穿梭机)
git status 查看工作目录、暂存区的状态
git diff 查看修改内容 (Git跟踪并管理的是文件的修改,而非文件本身)
git diff 详细命令: https://www.jianshu.com/p/80542dc3164e
git log 查看日志(一次次commit修改情况,注意是以commit为粒度)
(git log -p 可看到具体修改内容。按Enter向下阅读)
1)已经commit之后
- git reset --hard HEAD~1 回退1个提交(彻底回退,冲掉回退的信息)
- git reset --soft HEAD~1 回退1个提交+保留代码修改信息
- git reset --hard d311cd2 ==》先用git reflog查看各个版本的 commit id(如d311cd2)进行自由回退 (很好用!)
2)已经add,但没有commit(错误还在 stage暂存区)
两步操作:
git reset HEAD [filename]
git checkout -- [filename]
3)还没有add(错误还在 工作区)
只需要一步:
git checkout -- [filename]
(这样操作的粒度比较小;reset的话,粒度比较大;因为一般是一次commit是一到多次add的总和)
分析下粒度:
多次add,一次commit;
多次commit,一次push;
所以:
commit后的reset --hard 序号《==》1~n次的commit的粒度
add后的reset HEAD《==》回退到上次commit后的状态,相当于1~n次的add的粒度
add前的 checkout -- [filename] 《==》回退到上次add后的状态,相当于1次add内的粒度
详细说明git reset:
git reset --hard HEAD^ 硬回退一步
(此时本地回退了,但是远程没有回退;如果需要远程也回退,就要git push origin xxx再提交一下)
git reflog 查看各个版本的 commit id(如d311cd2)
git reset --hard d311cd2 根据后面的commit -m "..."信息,找到对应的id,进行自由回退 (很好用!)