Git场景运用-CSDN博客
- 专有名词
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库 - HEAD
HEAD,指向当前分支最新提交点。所处分支变化,或产生新提交,HEAD跟着变。 - add、commit
- branch
展示分支,切换分支,创建分支,删除分支。
git branch | 列出所有本地分支 |
git branch -r | 列出所有远程分支 |
git branch -a | 列出所有本地分支和远程分支 |
git branch [branch-name] | 新建分支,留在当前分支 |
git checkout -b [branch-name] | 新建分支,切换到该分支 |
git branch --track [branch][remote-branch] | 新建分支,与指定远程分支建追踪关系 |
git checkout [branch-name] | 切换指定分支,更新工作区 |
git branch -d [branch-name] | 删除分支 |
git push origin --delete [branch-name] | 删除远程分支 |
- merge
实际开放,从master分支切出一分支,开发完需求,经R3,R4,R5的commit记录,开发完需合入master,用merge。
git fetch [remote] merge前先拉远程仓最新代码 git merge [branch] 合并指定分支到当前分支 merge后,会出现conflict,主因两用户修改同文件同区域。如下
-
rebase
rebase又称衍合,合并另种选择。
开始阶段,处于new分支,执行git rebase dev,新commit在master分支重演一遍,checkout切换回new分支。这点与merge一样,合并前后所处分支并没改变。git rebase dev,通俗解释就是new分支想在dev肩膀继续。rebase也需手动解决冲突。
rebase与merge区别
两个分支,test和master,提交如下:
master执行git merge test,如下:
master执行git rebase test,如下:
A---B---D---E---C'---F' test, master
merge生成新节点,之前提交分开显示。而rebase不生成新节点,两分支融合成线性提交。
想要干净,没merge commit线性历史树,选择git rebase
想保留完整历史记录,避免重写commit history风险,选择用git merge
-
reset
reset把当前分支指向另个位置,相应变动工作区和暂存区。
git reset —soft [commit]
只变提交点,暂存区和工作目录内容都不变
git reset —mixed [commit]
变提交点,同时变暂存区内容
git reset —hard [commit]
暂存区、工作区内容都修改与提交点一致状态
git reset --hard HEAD
工作区回上次提交时状态
- revert
git revert用新提交消除历史提交所做任何修改。
revert与reset区别
git revert用新commit回滚之前commit,git reset直接删除指定commit。
回滚效果差不多。日后merge老版本有区别。git revert用逆向commit“中和”之前提交,日后合并老branch,改变不再出现,减少冲突。git reset把commit在某branch上删除,和老branch再次merge,被回滚commit还会被引入,产生冲突。
git reset 把HEAD向后移动,而git revert是HEAD继续前进,新commit内容和要revert内容正好相反,抵消revert内容。 - push
上传本地仓分支到远程仓分支,实现同步。git push [remote][branch]
上传本地指定分支到远程仓库
git push [remote] --force
强行推送当前分支到远程仓库,即使有冲突
git push [remote] --all
推送所有分支到远程仓库
- 其他命令
git status
显示有变更文件
git log
显示当前分支版本历史
git diff
显示暂存区和工作区差异
git diff HEAD
显示工作区与当前分支最新commit间差异
git cherry-pick [commit]
选择commit,合并进当前分支
联系方式
手机:13822161573 微信:txsolarterms QQ:419396409