Git笔记
Git
rebase 变基
在使用rebase命令的时候, 要知道.
rebase命令是为了最后的提交历史是单独一条清晰的线路
# 把bugFix分支合并到master内
git rebase master bugFix
如果只传入一个参数的话,默认把当前分支合并到指定分支内.
与上面的效果相同的情况下, 就是
git checkout bugFix
git rebase master
如果是HEAD所在是将要合并进去的小分支, 可能会比较省事.
作为管理方, 应该养成传双参的习惯.
高级使用方法
git rebase side3 master
当side3和master在一条分支上的时候,使用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:

浙公网安备 33010602011771号