本地操作
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 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
查看 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
表示的是这个ref
与tag
相差有多少个提交记录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
拉取并合并代码
拉取远程分支,并将其与本地分支合并
即为先fetch
后merge
的缩写
1 | git pull |
拉取远程指定位置代码并与当前分支合并
1 | git pull <remote> <place> |
等价于
1 | git fetch <remote> <place> |
拉取远程指定位置至本地指定位置并与当前分支合并
1 | git pull <remote> <source>:<destination> |
等价于
1 | git fetch <remote> <source>:<destination> |
历史偏离
如果和远程仓库出现历史偏离,我们需要先 fetch,然后通过 rebase 或 merge 合并远程分支,再 push
或使用简写:
1 | git pull --rebase |
代表先 fetch 再 rebase,最后 push
或者可以更简写:
1 | git pull |
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