git fetch 和 git pull的区别是什么?
git fetch 命令只会将数据下载到你的本地仓库--它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
git pull 命令来自动抓取后合并该远程分支到当前分支。
git rebase 和 git merge的区别是什么?
什么是git flow
Git 作为一个源码管理系统,不可避免涉及到多人协作。 协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去。"工作流程"在英语里,叫做"workflow"或者"flow",原意是水流,比喻项目像水流那样,顺畅、自然地向前流动,不会发生冲击、对撞、甚至漩涡。 它最主要的特点有两个: 首先,项目存在两个长期分支。
- 主分支
master- 开发分支
develop
前者用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版;后者用于日常开发,存放最新的开发版。 其次,项目存在三种短期分支。
- 功能分支(feature branch)
- 补丁分支(hotfix branch)
- 预发分支(release branch)
一旦完成开发,它们就会被合并进develop或master,然后被删除。
Git flow的优点是清晰可控,缺点是相对复杂,需要同时维护两个长期分支。大多数工具都将master当作默认分支,可是开发是在develop分支进行的,这导致经常要切换分支,非常烦人。
更大问题在于,这个模式是基于"版本发布"的,目标是一段时间以后产出一个新版本。但是,很多网站项目是"持续发布",代码一有变动,就部署一次。这时,master分支和develop分支的差别不大,没必要维护两个长期分支。
什么是cherry-pick
如何撤销已经提交的记录
1.使用 git commit --amend 命令
对之前的commit 提交进行修改。事实上确实如此,不仅可以修改提交的内容,还可以修改commit 信息。
注意:这里的之前指最近的commit,而且没有push到远程。
可以使用git commit --amend -m "提交描述" 修改comment
2.撤销已经提交到本地仓库的 Commit
使用 git reset --<cmd-type> <commit id> 命令即可撤销已经执行的 Commit 提交记录
使用的命令及参数:
其中的 <cmd-type> 参数为你需要执行的命令,这里有三种:
- soft:该命令会保留你已经执行的 Commit 中所做出的 Changes 并 Stage
- mixed:该命令会保留你已经执行的 Commit 中所做出的 Changes 并 Unstage
- hard:该命令不会保留你已经执行的 Commit 中所做出的 Changes
git reset --soft <commit id>
git reset --mixed <commit id>
git reset --hard <commit id>
其中的 <commit id> 参数为你已经执行的 Commit id,或者说你想要撤销到的某条 Commit 记录的 id:
- 当你需要撤销的只是上一步已经执行的 Commit 时,你可以使用
HEAD~1 - 当你需要撤销的那个 Commit 之后又有几条新的 Commit 记录,而你需要撤销到指定的某一条 Commit 提交记录,这时使用的是想要撤销到的那条 Commit 记录的 id
注:撤销提交记录不能跨分支撤销,否则会出错,执行撤销操作时需要注意你当前处于哪个分支节点 !