git解惑-----git使用场景
答疑:
1.如何查看当前本地分支对应的远程分支?
2.如何建立与远程某一个分支的映射关系? --set-upstream
查看当前详细分支信息(可看到当前分支与对应的远程追踪分支): git branch -vv
查看当前远程仓库信息 git remote -vv
一:回退
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作
场景3:已经提交了不合适的修改到本地版本库时,想要撤销本次提交,参考版本回退一节 git hard reset commitID
场景: 本地新建一个仓库关联到远程仓库:
git remote add origin git@github.com:用户名/仓库名.git 本地仓库与远程关联
git push -u origin master 本地库的所有内容推送到远程库 (远程库的名字就是
origin
,这是Git默认的叫法)
git push origin(远程仓库) master(主分支) 以后再提交
场景:在当前分支A上开发,然后add,comit; 别人的分支也开发并add,然后comit了与你有重复的文件,这个时候进行分支合并就会失败,必须人肉合并了! 然后add再commit
场景一:新建了一个项目,然后想推送到git仓库
1.git init --> git add . ----> git commit -m '' (推送到本地仓库)
2.git remote add origin https://github.com/MeFirebird/gitTest.git (创建本地仓库与远程关联:前提是当前仓库未与其他仓库关联)
3.git push -u origin master
注意事项:git branch不会输出东东,因为分支只有在git commit之后才会被创建
场景二:通过命令行创建一个新仓库(远程仓库)
1.先在github上新建一个仓库
2.本地创建文件夹 git init
3.git add . ---> git commit -m "zhushi"
4.git remote add origin https://github.com/MeFirebird/Git.git
5.git push -u origin master
注意事项:
1.git commit的时候 写注释要双引号 不然可能会报错
场景三:创建自己的额分支进行开发,开发完毕合到dev分支
1.git checkout -b sandy (创建并切换到sandy分支)
2.git add . ---> git commit -m 'comment'
3.git checkout dev(回到dev分支) git merge sandy(将sandy分支合到dev分支)
4.删除分支 git branch -d sandy
场景四:创建自己的分支进行开发,开发完毕合到dev分支,但是遇到冲突
1.步骤同上123 然后报冲突错误
2.人肉解决冲突 然后add commit
3.删除分支 git branch -d sandy
场景五:当前分支上工作了一半,代码提交上去会影响你本地系统的运行,所以不能提交(commit),但现在dev分支上出现一个紧急bug,需要你快速搞定,
然后好合版本到master分支,进行发布。
答:
1.如果是文件可以做到按需提交 但如果改bug和当前做的一半工作有文件冲突就不好了。
2.将自己当前工作代码clone一份,然后revert,然后改bug,改完bug再参照clone的工作代码恢复自己的进度
3.换一个账号,拉一条分支进行改bug
4.git stash 保存当前工作进度 ----》git checkout master(切换到master分支) ---》git checkout -b sandy(创建分支并切换到sandy)
如果不进行stash的话,无法进行分支切换
5.在创建的临时分支sandy上工作,然后commit,bug改好后,合并到master分支,至此,bug就Over了
6.回到自己之前的工作分支,然后git stash apply
场景六:多人协作
1.git push origin master 推送不成功,git pull先拉取远程,然后合并(本地版本库与远程版本库合并),有冲突(本地与远程)无法合并,SO解决冲突,然后本地commit
到版本库。 解决掉冲突后再推送到远程
如果git pull提示no tracking information 说明本地分支与远程分支没有映射关系,用命令建立:git branch --set-upstream-to <branch-name> origin/<branch-name>
场景七:Rebase 变基
1.git rebase 本地未push的分叉提交历史整理成直线 让git的提交历史更为清晰
场景八: 独立分支开发
1.在远程开好自己的分支,本地直接拉下来;
git checkout -b feature-branch origin/feature-branch //检出远程的feature-branch分支到本地
2.本地开好分支,推送到远程
git checkout -b feature-branch //创建并切换到分支feature-branch
git push origin feature-branch:feature-branch //推送本地的feature-branch(冒号前面的)分支到远程的origin的feature-branch(冒号后面的)分支(没有会自动创建)
概念:
git rm --cache <file> to unstage 从暂存区返回到工作区
commit就是提交到仓库了,然后就剩下同步到远程仓库了!
哦,大写有强制的意思啊:git -D
origin是远程仓库 master是主分支
查看远程库信息, 使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
先拉取,再提交
模式合并方式: --no-ff方式 fast forward方式
本地仓库的变更仅再当前分支可见,平行空间啊! 每个分支都在某一个基础版本上开始往下延伸,分支间互不干扰。
工作区的修改在任意分支下都是可见的
暂存区的修改在任意分支下都是可见的
切换分支前,要将当前分支的内容commit到本地仓库哦,不然会被覆盖的!
加上刚才合并的提交,现在我们本地分支比远程分支超前3个提交。
在github上,fork后的仓库才拥有读写权限,然后可以发起一个PR给源仓库
补充:
1.git图标意义