Git常用命令记录

本文最后更新于:2022年8月6日 晚上

https://learngitbranching.js.org

基础篇

提交

以当前的快照为基础,创建一个新的快照

git commit

分支

创建分支,就是创建一个指针 newImage,指向当前的快照

git branch ‘newImage’

切换分支

git checkout ‘分支名字’
切换分支并提交
git checkout ‘newImage’; git commt

合并分支

  1. git merge
    当前在 main 分支,还有一个 bugFix 分支,使用 git merge bugFix 把 bugFix 合并到 main 里

切换到 bugFix 分支, 把 main 分支合并到 bugFix 分支:
git checkout bugFix; git merge main

  1. git rebase
    Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
    将 bugFix 分支的内容移动到 main 分支后面,
    先切换到 bugFix 分支,然后 git rebase main

分离HEAD

在提交树上移动
git checkout c4

相对引用:改变HEAD的指向

  1. 使用 ^ 向上移动一个提交记录;
  2. 使用 ~<num> 向上移动多个提交记录,例如:~3

main^相当于 找 main 的父节点:git checkout main^
git checkout HEAD^

“~”操作符
如果你想在提交树中向上移动很多步的话,敲那么多 ^ 貌似也挺烦人的,Git 当然也考虑到了这一点,于是又引入了操作符 ~。
该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。咱们还是通过实际操作看一下吧

git checkout HEAD~4:后退4步

强制修改分支位置

我使用相对引用最多的就是移动分支。可以直接使用 -f 选项让分支指向另一个提交。例如:
git branch -f main HEAD~3

上面的命令会将 main 分支强制指向 HEAD 的第 3 级父提交。

git branch -f main HEAD~3 命令可以让 mian 去指定的位置

撤销变更

一是 git reset,还有就是 git revert。

本地使用 git reset HEAD~1:回退1个

为了撤销更改并分享给别人,我们需要使用 git revert。
revert 会创建一个新的提交,这个新的提交和上上个提交是一样的。
git revert HEAD
revert 后,可以把更改推送到远程仓库了。

整理提交记录

到现在我们已经学习了 Git 的基础知识 —— 提交、分支以及在提交树上移动。 这些概念涵盖了 Git 90% 的功能,同样也足够满足开发者的日常需求

然而, 剩余的 10% 在处理复杂的工作流时(或者当你陷入困惑时)可能就显得尤为重要了。接下来要讨论的这个话题是“整理提交记录” —— 开发人员有时会说“我想要把这个提交放到这里, 那个提交放到刚才那个提交的后面”, 而接下来就讲的就是它的实现方式,非常清晰、灵活,还很生动。

Git Cherry-pick

本系列的第一个命令是 git cherry-pick, 命令形式为:

git cherry-pick <提交号>...
如果你想将一些提交复制到当前所在的位置(HEAD)下面的话,
Cherry-pick 是最直接的方式了。我个人非常喜欢 cherry-pick,因为它特别简单。

当前在 main 分支,执行 git cherry-pick c2 c4, 将 side 分支的 c2和c4复制到当前 main 分支下面;

交互式的 rebase

当你知道你所需要的提交记录(并且还知道这些提交记录的哈希值)时,
用 cherry-pick 再好不过了 —— 没有比这更简单的方式了。

但是如果你不清楚你想要的提交记录的哈希值呢? 幸好 Git 帮你想到了这一点,
我们可以利用交互式的 rebase —— 如果你想从一系列的提交记录中找到想要的记录,
这就是最好的方法了

交互式 rebase 指的是使用带参数 –interactive 的 rebase 命令, 简写为 -i

如果你在命令后增加了这个选项, Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,
它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。

在实际使用时,所谓的 UI 窗口一般会在文本编辑器 —— 如 Vim —— 中打开一个文件。
考虑到课程的初衷,我弄了一个对话框来模拟这些操作。

git rebase -i HEAD~4
可以选择复制的节点快照

在 main 分支,执行 git rebase -i HEAD~4, 选择要复制的节点快照和顺序;


创建本地仓库

新建远程仓库

新建本地仓库,git-test

1
cd git-test

初始化仓库

1
git init

关联远程库

# git remote add origin(默认origin,可修改) branch_Name(为空时默认为master) url

两个地方的仓库名不需要相同,因为通过在本地仓库目录下执行这条命令(命令中包含远程库的名字)已经将两者建立了联系

1
git remote add origin [email protected]/xxx.git

创建文件,修改文件

添加所有文件到本地库

1
git add *

提交文件到本地库

1
git commit -m "提交日志"

将本地库的所有内容推送到远程库上

加上了-u参数(推送和关联),Git不但会把本地的master分支内容推送到远程新的master分支,

还会把本地的master分支和远程的master分支关联起来

以后即可直接用git push代替git push origin master

1
git push -u origin master

来源:https://zhuanlan.zhihu.com/p/87732909


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!