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 撤回 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/远程分支 本地分支
git 更新最新的 commit message
git commit --amend
git 强制推送到远程分支
git push -f
git 暂存
git stash 将文件放进暂存区
git stash pop 将暂存区的文件释放
git 合并两个远程分支
git remote -v 显示所有远程仓库
git remote add [short_name] [url] 添加远程版本库
git remote show [short_name] 显示某个远程版本库的信息
git remote rm name 删除远程仓库
git remote rename old_name new_name 修改仓库名
git fetch [short_name] 获取远程代码库,会首先检查本地仓库和远程仓库的差异,检查哪些不存在于本地仓库,然后将这些变动的提交拉取到本地
在远程仓库1的本地分支,合并远程仓库2的远程分支,使用 git merge 远程仓库2
解决(fatal: refusing to merge unrelated histories)
git merge [远程分支2] --allow-unrelated-histories
删除远程分支上已经不存在的分支
git remote prune origin