一. Git 工作流程
-
Git flow: 最早最广泛的一种开发流程。 有两个主要的长期分支Master主分支Develop开发分支 三个短期分支feature功能分支hotfix补丁分支release预发分支 -
GitHub flow:Git flow的简化版。它是 Github.com 使用的工作流程。主要有一个长期分支Master主分支 , 一个开发分支pull request(简称PR),PR通过后合并到主分支 -
GitLab flow: 是Git flow与Github flow的综合。最大原则叫做"上游优先"(upsteam first),即只存在一个主分支master,它是所有其他分支的"上游"。只有上游分支采纳的代码变化,才能应用到其他分支。
二. Git 基础概念
-
Workspace:工作区 -
Index/Stage:暂存区 -
Repository:仓库区(或本地仓库) -
Remote:远程仓库 -
HEAD:指针,可以叫做当前版本位置
三. 列举工作中常用的Git命令
-
git add .新增文件的命令 (从工作区到暂存区) -
git commit -m/git commit -a提交文件的命令 (从暂存区到仓库区) -
git status查看工作区文件状态 (未提交,已修改,已暂存,已提交) -
git push从仓库区上传到远程仓库 -
git pull从远程仓库拉到工作区 -
git reflog查看提交记录命令 -
git branch创建分支 -
git merge/git rebase合并分支
四. 撤回操作
-
git reset修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。
-
git revert用于“反做”某一个版本,以达到撤销该版本的修改的目的适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,
-
git checkout -- 文件名拉取暂存区的这个文件覆盖当前文件适用场景: 当文件在工作区修改,还没有提交到暂存区和本地仓库时。不过需要特别留意的是这些改动没有提交到 Git 仓库,Git 无法追踪其历史,一旦回滚就直接丢弃了。
-
git commit --amend覆盖上次提交注释适用场景: 上次
git commit后,未git push前,发现注释不详细,有问题时
五. git stash 如何使用
-
git stash是把工作区修改的内容存储在栈区。适用场景:
-
解决冲突文件时,会先执行
git stash,然后解决冲突; -
遇到紧急开发任务但目前任务不能提交时,会先执行
git stash,然后进行紧急任务的开发,然后通过git stash pop取出栈区的内容继续开发; -
切换分支时,当前工作空间内容不能提交时,会先执行
git stash再进行分支切换;
六. git merge和git rebase的区别
从上图可以轻松发现,merge 会把master分支和feature 合并在一起,在master分支提交一个新的 commit , 而 rebase 会把feature 分支合并到master分支里面,但会舍弃掉feature分支。
Merge命令会保留所有分支commit的历史时间,rebase通常是发生在自己的个人分支上的。这样做的好处就是保证每个人的代码都可以运行在当前最新的主分支的代码上
七. git log 与git reflog 的区别
git log –number:表示查看当前分支前number个详细的提交历史记录;git log –number –pretty=oneline:在上个命令的基础上进行简化,只显示sha-1码和提交信息;git reflog –number: 表示查看所有分支前number个简化的提交历史记录;git reflog –number –pretty=oneline:显示简化的信息历史信息; 如果要查看某文件的提交历史记录,直接在上面命令后面加上文件名即可。 注意:如果没有number则显示全部提交次数。
八.如何提交到远程分支
-
首先确保本地仓库与远程之间是连同的。如果提交失败,则需要进行下面的命令进行连通:
git remote add [shortname] [url] -
如果是第一次推送,则进行下面命令
git push -u [remote] [branch]// -u 指默认主分支之后的提交,只需要下面的命令:
git push -u [remote] [branch]
参考文献 [ ](GIT | GIT常见面试题_星空下的程序猿-CSDN博客_git面试题)
[ ]([git]merge和rebase的区别 - 削微寒 - 博客园 (cnblogs.com))
[](git log 查看提交记录 - lsgxeva - 博客园 (cnblogs.com))