Git练习地址 : Learn Git Branching
主要
1.基础篇
-
git commit
-
git branch
创建分支 : git branch <分支名>
切换分支 : git checkout <分支名>
创建分支同时切换到新分支 : git checkout -b <分支名> -
git merge
合并分支 : git merge <分支名> -
git rebase
复制提交记录 : git rebase <分支名>
注:上面两种合并情况都要注意当前分支是什么
2.高级篇
-
分离HEAD
git checkout <提交记录的哈希值> -
相对引用
使用 “^” 向上移动 1 个提交记录
使用 ~<数字> 向上移动多个提交记录,如 ~3
例 : git checkout main^
使用此命令让分支指向另一个提交 : git branch -f <来源> <目的> -
撤销变更
git reset <目的提交记录> : 把分支记录回退几个提交记录来实现撤销改动,主要用于本地,
git revert <来源提交记录> : 为了撤销更改并分享给别人
注:要切换到当前分支再撤销变更
3.移动提交记录
- git cherry-pick <提交号> : 将一些提交复制到当前所在的位置(HEAD)下面
- git rebase -i <提交号> : 交互式界面
4.杂项
- 只取一个提交记录
- 提交技巧
- git tag <标签名> <提交号> : 永久地将某个特定的提交命名为里程碑
- git describe <引用> : 输出的结果是这样的 : tag_numCommits_hash.
tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。当 ref 提交记录上有某个标签时,则只输出标签名称.
5.高级话题
- 多次rebase
- 两个父节点 : 第一个父节点(较早) git checkout main^ .第二个父节点 git checkout main^2
- 纠缠不清的分支
远程
1.Push & Pull —— Git 远程仓库!
- git clone
- 远程分支 : <remote name>/<branch name>
- git fetch : 并不会改变你本地仓库的状态。它不会更新你的 main 分支,也不会修改你磁盘上的文件
- git pull
- 模拟团队合作
- git push
- 偏离的提交历史 : git pull --rebase,git push
- 锁定的main : 新建一个新分支,然后push新分支,再reset main分支,这就是我们常说的pull request
2.关于 origin 和它的周边 —— Git 远程仓库高级操作
- 推送主分支 : 比如有多个特性分支,要合并特性分支再推上去
- 合并远程仓库
- 远程追踪 :
方法一 : git checkout -b totallyNotMain o/main 可以创建一个名为 totallyNotMain 的分支,它跟踪远程分支 o/main。
方法二 : git branch -u o/main foo 这样 foo 就会跟踪 o/main 了 - git push的参数 :
一 . git push <remote> <place>
例 : git push origin main 切到本地仓库中的“main”分支,获取所有的提交,再到远程仓库“origin”中找到“main”分支,将远程仓库中没有的提交记录都添加上去
二 . git push origin <source>:<destination> - git fetch的参数 :
git fetch origin foo .Git 会到远程仓库的 foo 分支上,然后获取所有本地不存在的提交,放到本地的 o/foo 上 - 没有source的source : 这里指的上面两个source参数
- git pull的参数 :
一 . git pull origin main : 通过指定 main 我们更新了 o/main。然后将 o/main merge 到我们的检出位置
二 . git pull origin main : foo : 先在本地创建了一个叫 foo 的分支,从远程仓库中的 main 分支中下载提交记录,并合并到 foo,然后再 merge 到我们的当前检出的分支 bar 上