# Git 进阶

# 参考文档

所有的操作都是在 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 的后面。
  • checkout 改变 HEAD,branch -f 改变分支所处的 commit
  • git describe 的语法是:
    • git describe <ref><ref> 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD)。
  • git pull 就是 fetch 和 merge 的简写
    • 类似的 git pull --rebase 就是 fetch 和 rebase 的简写!

# 多用户配置 ssh

# 讨论区

由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。

点击查看评论区内容,渴望您的宝贵建议~
Last Updated: 2/23/2023, 5:07:18 PM