git 的进阶用法

学习记录贴:

查看 branch 之间的关系图:

git log --graph --decorate --oneline --simplify-by-decoration --all

-–decorate 标记会让git log显示每个commit的引用

-–simplify-by-decoration 只显示被branch或tag引用的commit

-–oneline 一行显示

原贴位置:https://juejin.im/post/5ed7b02fe51d457867169a7b?utm_source=gold_browser_extension

echo > 输出重定向

echo >> 追加重定向

如果有两个不同的分支,则 git merge 对于记录它们合并的时间非常有用

在正常工作中,git rebase 更为合适

设置沙盒,进行模拟实验

git init /tmp/rebase-sandbox

cd /tmp/rebase-sandbox

git commit --allow-empty -m'Initial commit'

如果遇到麻烦,运行 rm -rf /tmp/rebase-sandbox 即可

修正最近提交 amend

git commit -a --amend 

-a 自动将所有 git 已经知道的文件进行缓存

--amend 将更改的内容压扁到最近的提交中

git show 查看修复的提交

修复比较旧的提交 fixup

git rebase -i HEAD~3

git rebase -i master  // 快速遍历所有提交

git rebase -i origin/master // 编辑所有尚未合并到上游的提交

1)、此命令会打开文本编辑器,显示最近的三次提交

2)、修改相应的需要合并的提交的 pick  为 fixup(可以使用 f 来进行缩写)

3)、并移动到需要修复的提交之后。

4)、修改完成后,保存并退出编辑器

5)、使用 git log -2 --oneline 查看日志,验证结果(-2代表最近的两次日志)

-i 代表交互式

HEAD~3 代表最近的三次提交

将多个提交压扁为一个 suqah

1)、git rebase -i master

2)、将除第一行外的每个 pick 改变为 squash 压扁,保存并退出

3)、修改提交信息,保存并退出,然后检查 git 日志

git pull --rebase

在由上游更新的分支(例如:远程分支)上做一些提交,git pull 会创建一个合并提交,默认等同于

git fetch origin <barnch>

git merge origin/<branch>

假设本地分支 <branch> 配置为从原始远程跟踪 <barnch> 分支,即:

git config branch.<branch>.remote

git config branch.<branch>.merge 

如下方式会让历史记录更清晰:git pull --rebase,基本等同于

git fetch origin

git rebase origin/<barnch>

将变基方式作为默认行为:git config --global pull.rebase true

变基git rebase

使用 rebase 命令可以使我们的提交历史更干净简洁。

master 分支和 <branch>分支同时修改一个文件时,rebase 解决冲突完之后,还能保证分支干净简洁

git rebase <branch>

当遇见冲突时,首先解决冲突

然后 git add .

然后继续 rebase 合并:git rebase --continue

git merge --abort 中止合并

git rebase --onto master feature-1 feature-2

变基前:git 的进阶用法变基后:git 的进阶用法

 git 撤回 commit:git reset

撤回上一个版本:git reset HEAD^   git reset HEAD~

撤回上 n 个版本:git reset HEAD~n

默认参数:--mixed 删除工作空间改动代码,撤销commit,并且撤销git add,但是修改的代码不会被删除

--soft 撤销 commit,不撤销 add 

--hard 删除巩固走空间改动代码,撤销 commit,并且撤销 add

 git 撤回 add: reset

撤回 add 提交:git reset HEAD

git 将本地分支推送到远程并设置为上游分支:

git push --set-upstream origin 本地分支

git 设置本地分支的上游分支:

git branch --set-upsteam-to origin/远程分支 本地分支