# 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

  1. 常见用法

    • git reset --soft HEAD~1 (用于撤销 commit 到本地,还没 push 的提交)
  2. 参数详解

  3. --mixed:不删除工作空间改动代码,撤销 commit,并且撤销 git add . ,为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

  4. --soft:不删除工作空间改动代码,撤销 commit,不撤销 git add .

  5. --hard:删除工作空间改动代码,撤销 commit,撤销 git add . ,注意完成这个操作后,就恢复到了上一次的 commit 状态。

  6. HEAD^的意思是上一个版本,也可以写成 HEAD~1,如果你进行了 2 次 commit,想都撤回,可以使用 HEAD~2

  • 那么如何撤销已经推送到远程分支的代码呢?
    1. git reset –-soft 或者 git reset –-hard (即本地先回滚)
    2. git push origin 分支名 --force (强制把本地分支推送上去)
Last Updated: 6/3/2024, 1:08:34 AM