# 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
# 讨论区
由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。