# Git 进阶
# 参考文档
# HEAD
所有的操作都是在 HEAD 进行。
git checkout 分支名
,那么 HEAD -> 分支 -> commitId(hash)git checkout hash
,那么 HEAD -> commitId(hash)
# branch
git branch -f 分支名
,如何移动
# stash
git stash list
查看 stash 列表git stash clear
清空所有的内容git stash drop stash@{0}
清空第一个
# cherry-pick
git cherry-pick
要获取的 commitId ...<可以多个>
# rebase
git rebase A B
,意思是 B 以 A 为基,并切换到 B 分支。(B 在 A 后面)
--abort
会放弃合并,回到 rebase 操作之前的状态,之前的提交的不会丢弃,即撤销 rebase。--skip
则会将引起冲突的 commits 丢弃掉,就是将自己修改的部分删除。--continue
结合git add
使用
在 rebase 过程中,如果出现了冲突,那么在手动解决冲突以后,需要先使用 git add
更新暂存区内容,再使用 git rebase --continue
完成 rebase 操作。
# origin/branch
当你 git fetch
的时候,拉下来的是远程的 o/branch
,这里的 o/branch
不会自己移动,只有远程的 branch 有了新的提交,它才会移动。
一般使用 git fetch
,将远程分支的当前位置拉下来,然后现在本地会有 o/branch
,这时候,你执行 git rebase o/branch
,将当前分支变基到 o/branch
再进行提交,就不会出错了。
# 将某个文件从版本控制中移除
git rm --cached <文件>
-> git commit
-> git push
# checkout -- filename
撤销现有的所有修改,将未暂存的修改撤销。
- 如果已经 add,这时候再写 aaa,这时候撤销只会撤销 aaa。
- 如果没有 add,这时候撤销会回到上一次 commit 的状态。
# restore
将暂存区的内容撤销。
git restore
,清空未暂存的修改。git restore --staged
,仅将文件撤销暂存,将暂存的文件撤出,没有其他作用。
# reset
git reset --hard
,清空暂存区和本地git reset
,即--mixed
, 清空暂存区保留本地
# git 实战
- 强制修改分支位置
git branch -f <目标分支> HEAD~3
,使用 -f。
- 改变提交记录
- 就是将指定的提交(commit)应用到当前分支
git cherry-pick <commit id>
git rebase -i <往前几次提交>
,界面化的。git rebase A B
,就是将 B 的 commit 添加在 A 的后面。
- 就是将指定的提交(commit)应用到当前分支
- checkout 改变 HEAD,branch -f 改变分支所处的 commit
git describe
的语法是:git describe <ref>
,<ref>
可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD)。
git pull
就是fetch 和 merge
的简写- 类似的
git pull --rebase
就是 fetch 和 rebase 的简写!
- 类似的
# 多用户配置 ssh
# 讨论区
由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。