/

git学习笔记

本地操作

Git Commit

提交记录

1
git commit -m "logs here"

修改上次提交

1
git commit --amend

Git Branch

新建分支

1
git branch [Branch Name]

强制修改分支位置

强制修改 main 分支至 HEAD 往前 3 个提交

1
git branch -f main HEAD~3

设置远程跟踪

1
git branch -u [Remote Branch Name eg:origin/main] [Branch Name]

也可以省略本地分支名称,默认为当前所在分支

1
git branch -u [Remote Branch Name eg:origin/main]

Git Checkout

(检出)

切换分支

1
git checkout [Branch Name]

分离 HEAD

1
git checkout [commit name]
1
git checkout [tag name]

创建并切换分支

1
git checkout -b [New Branch Name]

创建并切换和跟踪分支

1
git checkout -b [New Branch Name] [Remote Branch Name eg: origin/main]

创建一个分支,并让它跟踪一个远程分支,原先跟踪这个远程分支的跟踪将会被取消

Git Merge

合并分支

1
git merge [Another Branch Name]

Git Rebase

变基

将所在分支的所有提交移到另一个分支后面

1
git rebase [Another Branch Name]

交互式 Rebase

使用可视化界面将 HEAD 前 4 个提交手动排序和挑选

1
git rebase -i HEAD~4

Git Log

查看提交记录

1
git log

Git Reset

撤销提交 - 回退到上 n 个提交

1
git reset HEAD~1

Git Revert

撤销提交 - 删除本次提交内容并提交

删除 HEAD 处提交的内容并发一个新提交

1
git revert HEAD

HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。

查看 HEAD 指向

可以通过 cat .git/HEAD 查看, 如果 HEAD 指向的是一个引用,还可以用 git symbolic-ref HEAD 查看它的指向

HEAD 位置偏移

HEAD^:向上移 1 个提交记录(多个^可以移多个)
HEAD~<num>:向上移动多个提交记录,如 ~3~表示移 1 个

Git Cherry-pick

将其他分支的提交加在当前分支之后

直接将其他分支的某些提交加在当前分支之后

1
git cherry-pick [commit name] [commit name] [...]

Git Tag

建立标签

在某个提交处建立 tag

1
git tag [tag name] [commit name]

在 HEAD 处建立 tag

1
git tag [tag name]

Git Bisect

一个查找产生 Bug 的提交记录的指令

Git Describe

查看ref(向上)最近一个 tag 信息

1
git describe <ref>

输出结果形式:

1
<tag>_<numCommits>_g<hash>

tag表示的是离ref最近的标签
numCommits表示的是这个reftag相差有多少个提交记录
hash表示的是你所给定的ref所表示的提交记录哈希值的前几位

Ref

ref 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD

远程操作

远程分支命名规范:<remote name>/<branch name>

检出(checkout)至远程分支时,自动进入分离 HEAD 状态,因为 git 不能直接在远程分支基础上修改

Git Clone

拷贝远程仓库

Git Fetch

拉取所有远程分支

将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态,但不会改变本地的分支

1
git fetch

拉取远程指定位置

1
git fetch <remote> <place>

带参数情况下会忽略当前检出分支属性

拉取远程指定位置至本地指定位置

1
git fetch <remote> <source>:<destination>

source 指远程指定位置
destination 指本地指定位置

若本地指定位置不存在,则会自动创建分支

创建本地新分支

1
git fetch <remote> :<destination>

即 source 置空即可创建本地 destination 位置分支

Git Pull

拉取并合并代码

拉取远程分支,并将其与本地分支合并

即为先fetchmerge的缩写

1
git pull

拉取远程指定位置代码并与当前分支合并

1
git pull <remote> <place>

等价于

1
2
git fetch <remote> <place>
git merge <remote>/<place>

拉取远程指定位置至本地指定位置并与当前分支合并

1
git pull <remote> <source>:<destination>

等价于

1
2
git fetch <remote> <source>:<destination>
git merge <destination>

历史偏离

如果和远程仓库出现历史偏离,我们需要先 fetch,然后通过 rebase 或 merge 合并远程分支,再 push

或使用简写:

1
2
git pull --rebase
git push

代表先 fetch 再 rebase,最后 push

或者可以更简写:

1
2
git pull
git push

Git Push

上传代码

将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。

push 之后,远程仓库将会更新,本地仓库的远程分支也会更新到本地分支对应位置

1
git push

不带任何参数时的行为与 Git 的一个名为 push.default 的配置有关

上传至远程指定位置

1
git push <remote> <place>

带参数情况下会忽略当前检出分支属性

上传本地指定位置至远程指定位置

1
git push <remote> <source>:<destination>

source 指本地指定位置
destination 指远程指定位置

若远程指定位置不存在,则会自动创建分支

删除远程分支

1
git push <remote> :<destination>

即 source 置空即可删除远程 destination 位置分支

历史偏离

如果和远程仓库出现历史偏离,我们需要先 fetch,然后通过 rebase 或 merge 合并远程分支,再 push