Git笔记

Git

rebase 变基

在使用rebase命令的时候, 要知道.
rebase命令是为了最后的提交历史是单独一条清晰的线路

#  把bugFix分支合并到master内
git rebase master bugFix

如果只传入一个参数的话,默认把当前分支合并到指定分支内.
与上面的效果相同的情况下, 就是

git checkout bugFix
git rebase master

如果是HEAD所在是将要合并进去的小分支, 可能会比较省事.
作为管理方, 应该养成传双参的习惯.

高级使用方法

git rebase side3 master

side3master在一条分支上的时候,使用rebase命令直接把后面branch拉到前面branch. 这个时候 两个分支的位置都在 branch1 的位置上. 且HEAD在后一个分支上.
相当于

git branch -f master side3
git checkout master

这个时候采用这种方式能节省一次切换开销, 更加方便省事.
但是要注意, 前提是两个分支都在一条提交线上, 只有先后之分.

checkout

ckeckout 操作的是 HEAD游标

branch

branch 操作的是 <branch-name>分支名游标

reset

撤消提交, 清除之前的提交历史. 把之前的已提交退到暂存区.

git reset master^
1 ==> 2 
撤消2, 则
1 

说明:
此时2来到暂存区, 记录上没有2.
此时的1和之前的1, 内容一样,且HEAD相同

revert

不撤消之前的提交记录, 生成新的提交记录, 在新的提交记录里删除之前的提交.

git revert HEAD^
1 ==> 2
撤消2, 则
1 ==> 2 == 1'

说明:
相当于又提交了一次, 这次提交里面是把上次的提交删除掉
此时新的1'和之前的1, 内容一样,HEAD不同

cherry-pick

优选命令: 该命令是把 别的分支对应的提交记录添加到当前的分支之上

使用场景:

  • 在多次提交之后, 只想要保留 其中个别提交记录的时候.

rebase -i

调节命令: 当需要调节 当前分支的提交记录的时候, 使用该命令. 会单独出现一个rebaseUI界面.(vim或其他文本)
在这个界面里能做三个事

  • 调节顺序
  • 删除提交
  • 合并提交

commit --amend

当我们需要进行修改 上次的提交记录的时候, 就可以使用 commit --amend
该命令的限制条件就是, 只能修改 上次提交的记录.如果不是,那么则无法修改.

但是好在, 我们在上面的命令行里学到, rebase -i 是可以调整提交的顺序的.
这样, 就可以通过rebase -i来更改对应的提交顺序, 之后调用 commit --amend, 来修改对应的提交内容. 之后再次调用 rebase -i 来还原对应的提交内容.

fetch

就是下载. 把远程仓库中有的, 而本地仓库中没有的东西下载下来.
并且更新origin/master
但不更新master
所以下载的东西只在本地仓库有体现, 而工作区中是没有变化的.

fetch和pull的区别

fetch 只有一个动作: 下载 # HEAD保持原样不动
pull 有三个动作: 下载, 合并(merge). # HEAD 发生改变 (同merge)

历史偏移

在使用git的时候, 最多的问题出现的节点在于. 你之前所拉的远程分支, 现在已经更新过许多次.
你的origin/master已经是很古老的版本了.
这种情况下, git是不会允许你直接push代码到远程仓库的.
想要push
需要先让本地的origin/master和远程的内容保持一致.
所以需要的是, 先进行同步, 才推送.
方法有两种:

# rebase 方法(保持一条提交记录)
git fetch & git rebase origin/master master & git push

# 等同于
git pull --rebase & git push

# merge 方法(有两条合并记录)
git fetch & git merge origin/master master & git push

# 等同于
git pull & git push

远程跟踪

remote tracking
远程仓库和本地仓库的关联关系, 默认同名
可以修改, 以实现某些分支策略.

git checkout -b 本地分支 远程分支
git branch -u 远程分支 本地分支

例:

git checkout -b foo origin/master
# 或
git branch -u origin/master foo

此时本地分支foo关联远程master, 无论pull还是push, 都与远程的master互动.

push

git push <remote> <place>

通常push的两个参数是省略的, 如何HEAD没有在需要推送的分支之上 , 则在使用的时候需要填写对应分支.

:符号使用

#  删除远程分支foo和本地的关联origin/foo
git push origin foo:
# 创建本地分支foo
git fetch origin foo:
posted @ 2020-12-07 20:03  Jrri  阅读(86)  评论(0编辑  收藏  举报