学自-learngitbranching-这个网页

learngitbranching

Rebase

这里有一张图片:
Rebase

Rebase 其实理解起来就是, 将一个分支的所有工作, 以另一个分支为起点提交. git rebase [一个分支名], 这里选取的分支就是作为新的起点.

Detach HEAD

为什么叫 Detach 呢? 因为 HEAD 和分支分离了, 指向了一个 commit.

Relative refs

通过提交的相对位置来移动 HEAD 指针, 而不是用 Hash 值.

  • 向上一次用 ^
  • 向上多次用 ~<num>

如:

1
$ git checkout main^

用 HEAD 指针退回:

1
2
$ git checkout C3
$ git checkout HEAD^

强制一个 branch 移动:

1
$ git branch -f main HEAD~3

main 会回退到 HEAD 指针的 3 次提交前.

Reverse Changes in Git

两个方法:

  • reset
  • revert

git reset, 用于 local, 其实就是回退, 如 git reset HEAD~3.

git reverse 用于 remote, 这个命令会生成一个新的 branch 来介绍改变的内容.

Git Cherry-pick

看命令的名字就知道, 我们当前 HEAD 所在分支想要获取其他 commit 的内容, 比如 c2, c4, 那么:

1
$ git cherry-pick c2 c4

就会让 HEAD 所在分支前进两步, 获取 c2 和 c4 两次 commit 的内容.

Git Interactive Rebase

也就是使用 git rebase-i 选项.

如:

1
$ git rebase -i HEAD~4

HEAD 指针就会以前第 4 次提交为 base, 然会会用 vim (或者其他) 打开一个界面, 选择刚才越过的四个里面哪些 commit 是需要的. 在你把某些 commit 选择为需要后则会在这个 base 上合并前进.

还可以调整 commit 的顺序等.

git commit --amend 可以追加提交.

Git Tags

不能 checkout 一个 tag 然后在上面工作 (意思是 branch 的名字不是叫 tag). 若要给 c1 添加一个 v1 的 tag:

1
$ git tag v1 c1

可以利用 tag 跳转.

Git Describe

git describe 这个命令可以描述, 某一个 commit 距离其最近的 tag 的一些相关信息, 如相隔多少个 commit, 以及这一个 commit 的 hash 值.

Specifying Parents

Git Remote Branches

拉去下来的分支称为远程分支. 名称格式为 <remote name>/<branch name>, 远程分支只有远程仓库更新了才会更新, 不然不会移动, 移动的只是 HEAD.

Git Fetch

git fetch 这个命令可以更新远程分支. 但不会更改 local 的状态.

Git Pull

git pull 命令不仅跟新远程分支, 还会将其和 local 的分支 merge.

Simulating colaboration

git fakeTeamwork 假设远端跟新, 可以指定 branch name 和 commit 个数:

1
$ git fakeTeamwork foo 3

Git Push

git push 不加参数, 所依据的是 push.default 的内容. 且本地的远程分支也会更新.

Diverged Work

git pull --rebase 相当于先 fetch 然后再 rebase. 其以远程分支的节点为 base.

Remote Rejected

local 更改的起点和 remote 不同.

即遇到 ! [remote rejected] main -> main (TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.) 这种报错.

Mergin feature branches

将 feature 分支内容 merge 到 main 分支中.

Remote-Tracking branches

默认情况下, git pull 之后 main 分支会移动.

Push Arguments

格式为 git push <remote> <place>

<place> Argument Details

将 local 上的一个 branch 提交到 remote 上的不同 branch.

1
$ git push origin <source>:<destination>

Git fetch arguments

如:

1
$ git fetch origin foo

设置和更改 remote tracking, 使用 git branch -u o/main foo 就设置 foo 来 track o/main


学自-learngitbranching-这个网页
http://example.com/2022/09/25/学自-learngitbranching-这个网页/
作者
Jie
发布于
2022年9月25日
许可协议