git基础指令
1. 提交
git commit
2. 新建并切换分支
git checkout -b [branch name]
or
git branch [branch name]
git checkout [branch name]
3. 合并分支
如何把a分支合并到b分支下面,先切换到b分支
git checkout [branch b]
然后把a分支合并过来
git merge [branch a]
4. rebase合并分支
切换到bugFix分支,rebase到master下面,rebase和merge不同点在于rebase会把另一个分支的提交记录也复制过来
git checkout bugFix
git rebase master
5. 移动相对引用标签HEAD
向上移动一个提交
git checkout HEAD^
向上移动3个提交
git checkout HEAD~3
将 master 分支强制指向 HEAD 的第 3 级父提交
git branch -f master HEAD~3
6. 重置本地分支
reset, 切换到本地分支,目的是使HEAD指向本地分支
git checkout [本地分支]
git reset HEAD^
HEAD^为重置一个提交,HEAD^^为2个,类推, HEAD~4为4个提交
7. 重置远程分支
revert
git checkout [远程分支]
git revert HEAD
注意这里的HEAD和reset上面的并不一样,这里的HEAD没有尖括号
8. 复制别的分支的提交记录到当前分支
cherry-pick
git checkout [branch name]
git cherry-pick [提交记录hash值1] [ 提交记录hash值2] ...
9.rebase的交互式界面
用于调整每个提交的顺序
git rebase -i HEAD~4
此命令会弹出最近4次的提交记录,并且通过拖拽可以调整顺序
10.复制最近一次提交出来并新建一个分支
git commit --amend
11. 跟某个提交打标签
git tag [tag name] [submit hash value]
12. 拉取远程代码
git pull
或者
git fetch
git merge [新拉下来的分支]
13.提交代码
git push
14. 本地落后于远程的拉取代码
git pull --rebase
git push
git pull 和 git pull --rebase区别
git pull是把远程新的提交拉下来,然后和本地新的提交合并,产生一个新的本地提交
git pull --rebase 把远程新提交拉下来后,排到本地新提交前面,和原来未提交状态一致
在开发社区里,有许多关于 merge 与 rebase 的讨论。以下是关于 rebase 的优缺点:
优点:
Rebase 使你的提交树变得很干净, 所有的提交都在一条线上
缺点:
Rebase 修改了提交树的历史
比如, 提交 C1 可以被 rebase 到 C3 之后。这看起来 C1 中的工作是在 C3 之后进行的,但实际上是在 C3 之前。
一些开发人员喜欢保留提交历史,因此更偏爱 merge。而其他人(比如我自己)可能更喜欢干净的提交树,于是偏爱 rebase。仁者见仁,智者见智。 😄
15. 新建一个分支并且直接设置追踪远程某一个分支
以下是, 首先更新了远程分支,然后,新建了totallyNotMain分支并追踪远程的o/main分支
git remote update origin -p
git checkout -b totallyNotMain o/main
16.直接设置某个分支去追踪远程分支
以下是设置foo分支去追踪远程的o/main分支,当已经checkout到foo下面时候,foo是可以省略
git branch -u o/main foo
17. 推送高级设置
在不检出本地分支的情况下,直接push远程仓库,下面命令会在远程origin仓库中找到mian分支,并提交上去
git push [origin远程仓库名] [本地仓库名]
git push origin main
下面代码直接指定远程分支,把foo分支推送到远程的main分支上面,如果面分支是不存在,会自动创建
git push origin foo:main
PS: 防止这个push这个命令误删远程分支,下面的这个命令会删除远程的foo分支
git push origin :foo
18. 高级拉取
Git 会到远程仓库的 foo 分支上,然后获取所有本地不存在的提交,放到本地的 o/foo 上。
git fetch origin foo
指定目标
下面实现了从远程main分支拉取然后同步到本地的foo分支上面,注意冒前参数和push相反
git fetch origin main:foo
下面这个命令可以在本地建一个新的foo分支
git fetch orgin :foo
从bar分支拉取并应用到foo上
git pull origin bar:foo
19. 撤回提交
撤回本地提交但是不删除改动
git reset --soft HEAD^
撤回本地提交,并删除提交的改动
git reset --hard HEAD^
20. stash在不提交的情况下切换分支
如果分支中有文件已经修改,但是又不想提交的情况下切换分支,那么需要用到stash
git stash
git checkout [branch name]
...
git stash list
git stash apply [stash number]
21. 最强的复位方法
抛弃我所有的分阶段和未分阶段的更改,忘记我当前的本地分支上的一切,使它与origin / master完全相同
git reset --hard origin/master
22. 列出已有的标签
git tag
23. 打一个标签
git tag "release/2.2"
24. 标签同步到云端
git push origin --tags
25. 删除一个标签
git tag -d "release/2.2"