# 1.git
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
- 关键词:Git 是分布式版本控制系统,每个人的电脑就是一个完整的版本库
# 常见命令
- git clone:克隆远程仓库
- git add:提交到暂存区
- git diff:比较暂存区和工作区区别
- git commit:暂存区=>本地仓库
- git pull:拉取远程代码并合并
- git push:推送代码到远程并合并
- git stash:缓存暂存区和工作区的改动,保存在一个栈上面
- git cherry-pick: 将其他分支的提交挑选到当前分支上
- git switch: 切换分支到某个提交节点上,并且处于游离态
# fork、clone、branch
- fork:复制一份代码到远程仓库,远程仓库是你自己。可以通过 pull request 贡献给原仓库
- clone:复制一份代码到你自己的仓库,远程仓库是 clone 的仓库。
- branch:新开分支。
# pull、fetch
- pull:拉取远程仓库最新内容并直接合并。git pull = git fetch + git merge。
- fetch:拉取远程仓库最新内容,用户检测之后决定是否合并到本机分支。
# rebase、merge
- rebase:
rebase
会将整个分支移动到另一个分支上,有效地整合了所有分支上的提交。主要的好处是历史记录更加清晰,是在原有提交的基础上将差异内容反映进去,消除了git merge
所需的不必要的合并提交- 可以保留提交历史
- merge:通过
merge
合并分支会新增一个merge commit
,然后将两个分支的历史联系起来。其实是一种非破坏性的操作,对现有分支不会以任何方式被更改,但是会导致历史记录相对复杂- 会更改历史提交时间,可能会丢失上下文。
# reset、revert
- reset:回退版本,遗弃提交
- revert:新增一次提交,抵消上一次提交导致的变化
git revert 是用一次逆向的 commit“中和”之前的提交,因此日后合并老的 branch 时,之前提交合并的代码仍然存在,导致不能够重新合并
但是 git reset 是之间把某些 commit 在某个 branch 上删除,因而和老的 branch 再次 merge 时,这些被回滚的 commit 应该还会被引入
# reset
常见用法
- git reset --soft HEAD~1 (用于撤销 commit 到本地,还没 push 的提交)
参数详解
--mixed:不删除工作空间改动代码,撤销 commit,并且撤销 git add . ,为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft:不删除工作空间改动代码,撤销 commit,不撤销 git add .
--hard:删除工作空间改动代码,撤销 commit,撤销 git add . ,注意完成这个操作后,就恢复到了上一次的 commit 状态。
HEAD^的意思是上一个版本,也可以写成 HEAD~1,如果你进行了 2 次 commit,想都撤回,可以使用 HEAD~2
- 那么如何撤销已经推送到远程分支的代码呢?
- git reset –-soft 或者 git reset –-hard (即本地先回滚)
- git push origin 分支名 --force (强制把本地分支推送上去)
2.Linux →