Git命令总结【notes】

本文详细介绍了Git的主要命令,包括提交、分支创建与切换、合并、撤销操作,以及指针引用、标签和描述的使用。此外,还阐述了远程仓库的管理,如fetch、push、pull命令的参数和用法,以及如何处理分支分歧。最后提到了一些推荐的学习资源。
摘要由CSDN通过智能技术生成

目录

一、主要git命令

1. git提交、分支、选择、合并

2. 指针引用(绝对,相对)、撤销

3. 摘取、重置、修改

4. 标签、描述

5. 修饰符

二、远程仓库命令

1. 远程操作推拉取

2. fetch、push、pull等各种参数

三、推荐


一、主要git命令

1. git提交、分支、选择、合并

git commit(提交): 在目前指针所在的分支上进行一个提交。
git branch [yourbranchname](分支): 在当前指针所指的提交处建立一个新的分支,以该提交节点为起点。(若命令后面加了一个分支名参数,那么就不是在默认的当前所在提交处建立新分支了)

理解:分支只是指向某个特定提交的指针,一个分支基本上是在说 "我想包括这个提交和所有父提交的工作"。

git checkout [yourbranchname](检查分支):指向yourbranchname分支,从而进行在该分支上的提交(Git 2.23版本中,或使用有更多参数的 git switch 命令)。
git checkout -b [yourbranchname](新建并检查分支):合并了上述两个命令,在当前指针处新建分支,并将指针指向该新分支。

git merge [yourbranchname](合并分支):将yourbranchname分支合并到现在所在的分支中,并进行一个新的提交,该提交有两个父提交。
git rebase [yourbranchname](合并分支):将当前所选择的分支放在命令中的yourbranchname分支后面,git会顺序排列,所选分支指向不变(合并不同分支之间的工作,本质是将一组提交 "复制 "到其他地方,用来制作一个漂亮的线性提交序列),若当前所选择的分支本身就在yourbranchname分支中且是其前节点,那么当前所选分支的引用会移动到yourbranchname引用处。
(若命令后面加了一个分支名参数,那么要重放的分支就不是默认的当前所选择的那个分支了)

2. 指针引用(绝对,相对)、撤销

HEAD 总是指向反映在工作树上的最新的提交,当然,后续可以自己checkout将其指向某个特定提交。
git checkout [yourbranchname] / [某个提交的哈希值](合并分支):将HEAD指针指向某个分支,或某个特定的提交(HEAD在指向某个分支时一般会隐藏在分支名下面,若指定该提交的哈希值,则会从分支名中脱离出来)。
git log:查看提交(commit)的哈希值

相对引用:避免查找指定哈希值,可以通过当前选择的某个提交来相对指向某个提交。用 ^ 表示一次向上移动一个提交点;用 ~<num> 表示向上移动若干次.
git checkout [yourbranchname]^:把 ^ 附加到一个引用名上,就是告诉Git去找该指定提交的父级,即HEAD指向该父级;^^ 就表示找父级的父级 。。。(这里的yourbranchname可以是某分支名,可以是某特定提交的哈希值,也可以是HEAD)
git checkout [yourbranchname]~ <num>:在~后面加入一个数字,指定你想上升的层数,避免多次输入^。
git branch -f sourcebranch [yourbranchname]~ <num>:用 -f 选项直接将一个分支sourcebranch引用名重新分配给一个提交。(与前面介绍的git branch [yourbranchname](分支)联系一下)

git reset [特定commit]:将当前分支的引用向后移动到一个更早的提交来逆转变化。
git revert HEAD:会再进行一次提交,当前引用指向新的提交,新提交即为逆转上一次变化后的结果。

3. 摘取、重置、修改

git cherry-pick <Commit1> <Commit2> <…>:表示你想复制一系列提交到你当前位置(HEAD)之下,HEAD会随之移动(若HEAD未从分支名脱离出来,则分支随之延长)。

git rebase -i <Commit>:将当前所选择的分支放在命令中的Commit处,-i 提供交互窗口,可删除可排序一系列的提交。
git commit --amend:修改当前指向的提交,并在其父级进行修改版的提交,HEAD会随之移动到修改版提交处。

4. 标签、描述

git tag [tagname] <commit>:永久地将某些提交标记为 “tagname”,若命令中省略了<commit>参数,则默认给当前HEAD所指向的提交打上标签。

git describe <ref>:其中<ref>是任何git可以解析为提交的东西,如某个提交的哈希值,或者是相对引用,只要能指定某个提交即可。
如果不指定 ref,git 就会使用现在checkout的提交(HEAD);
该命令的输出:tag_numCommits_gcommit,其中 tag 是历史上最接近该提交的祖先标签,numCommits 是该标签距离的提交次数,而 commit 是被描述的提交(即 ref 或 HEAD)的哈希值。

5. 修饰符

和~修饰符一样,^修饰符也可以在后面接受一个可选的数字,用来指定从一个合并提交开始要遵循的父代参考,默认情况下,Git 会跟随合并提交的 "第一个 "父级参考。
这两个修饰符可以结合在一起使用。

二、远程仓库命令

1. 远程操作推拉取

从技术上讲,git clone在现实世界中是用来创建远程仓库(例如从github)的本地副本的命令。但在这里,我们对这个命令的使用有点不同 – git clone 用来在你的本地仓库中创建一个远程仓库。
git clone:在本地仓库中创建一个远程仓库,同时本地仓库会出现一个远程分支,用来跟踪远程状态。
远程分支命名惯例:<远程名称>/<分支名称>。
因此,如果你看一个名为 o/main 的分支,则该分支的名称是 main,远程仓库的名称是 o(origin)。
当 checkout o/main 时,git会 把我们放入分离的 HEAD 模式,因为 o/main 是需要与远程仓库中的分支同步更新的。

git fetch:从远程仓库获取本地仓库中缺失的数据,更新我们的远程分支的指向,以反映最近一次远程仓库该分支的状态,与本地分支无关。

获取远程变化然后合并它们,以让本地主分支(HEAD 指向)反映来自远端(本例中,名为origin)的新工作:如 git fetch; git merge o/main;
git pull:为 git fetch 与 git merge [刚刚同步的远程分支] 的结合。

git push:将本地修改上传到指定的远程,并更新该远程以纳入你的新提交。远程更新之后,本地的远程分支也会随之同步。(push的是本地HEAD指向分支,fetch是对整个仓库而言)

避免分歧:git 强迫你在能够分享push你的工作之前纳入远程的最新状态。(也就是说在push之前,本地的远程分支必须与远程仓库中的状态同步)
解决:先 fetch,同步本地的远程分支…
git pull --rebase:先 fetch,再将HEAD引用 rebase 到同步的远程分支。

2. fetch、push、pull等各种参数

git checkout -b totallyNotMain o/main:创建一个名为 totallyNotMain 的新分支,并将其设置为跟踪 o/main。

在一个分支上设置远程跟踪的另一种方法是简单地使用git branch -u选项。运行
git branch -u o/main foo:将把 foo 分支设置为跟踪 o/main。如果 foo 目前已被checkout,你甚至省略它
git branch -u o/main

git push <远程> <地点>:如,git push origin main,意思是到我的仓库中名为 "main "的分支,抓取所有的提交,然后到远程名为 "origin "的分支 "main "上。把所有缺失的提交放在该分支上,完成后告诉我,此时可以忽略HEAD所在的位置。
git push origin <source>:<destination>:将本地 source 分支推送到远程 destination 分支上。
如果你想推送的目的地不存在怎么办?只要给一个分支名称,git就会为你在远程source处创建这个分支。
git push:如果没有收到任何参数,它只是将本地HEAD指向的分支推送到远程的对应分支上…

git fetch origin foo:Git 会去远程的 foo 分支,抓取所有本地没有的提交,然后把它们放到本地的 o/foo 分支上。
git fetch origin <source>:<destination>:将远程的 source 分支抓取到本地 destination 分支上。
如果你想抓取的目的地不存在怎么办?只要给一个分支名称,git就会为你在本地source处创建这个分支。
git fetch:如果没有收到任何参数,它只是从远程下载所有的提交到所有的远程分支…

指定<source>为空参数:
git push origin :side:通过把 "无 "的概念推给远程的side分支,可以成功地删除它。
git fetch origin :bugFix:会在本地HEAD处创建一个新的分支bugFix。

git pull origin foo 相当于:
git fetch origin foo; git merge o/foo
git pull origin bar~1:bugFix 相当于:
git fetch origin bar~1:bugFix; git merge bugFix
git pull实际上只是fetch + merge的缩写,而且git pull关心的是提交的最终位置(它在fetch时计算出的目标参数)

撒花撒花🎉🎉🎉
撒花撒花🎉🎉🎉

三、推荐

B站入门github视频(这个up主很幽默,哈哈哈哈):一看就懂!Github基础教程
可视化学习网站:Learn Git Branching (本文整理参考的来源)

最后,熟能生巧啦~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值