Git 使用笔记

1、恢复到某个commit的两种方法

回退:git reset

原理: git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本。
适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。

回滚:git revert

原理: git revert是用于回滚某一个版本,以达到撤销该版本的修改的目的。
适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。

区别

reset: 目标版本之后的版本不见了。
revert: 目标版本之后的版本还在,并生成一次最新的提交记录。

比如,我们commit了三次提交(commit_id_1、commit_id_2、 commit_id_3),突然发现commit_id_2有问题不需要了,想要撤销commit_id_2的提交。两种方法操作的结果区别:

git reset commit_id_2
# commit_id_2提交没了,commit_id_3提交也没有了。
git revert commit_id_2
# commit_id_2没了,commit_id_3还有,还生成了最新的commit_id_4。
具体操作
## git reset ,三种模式:soft,mixed,hard
# 回退到上个版本
git reset --hard HEAD^
# 回退到前2次提交之前,以此类推,回退到n次提交之前
git reset --hard HEAD~2
# 退到/进到 指定commit的sha码
git reset --hard commit_id

## git revert
# 回滚最新一次的提交
git revert HEAD
# 回滚前一次的提交
git revert HEAD^
# 回滚历史上的某次commit
git revert commit_id
最后别忘了强推覆盖远程
git push origin/test --force
或
git push origin/test -f
git reset 的三种模式:hard、soft、mixed

reset --hard: 重置暂存区(stage)和工作目录(working tree)。
reset --soft: 保留工作目录(working tree),并把重置 HEAD 所带来的新的差异放进暂存区(stage)。
reset --mixed: 保留工作目录,并清空暂存区。简而言之,就是把所有差异放在工作目录中。reset 如果不加参数,那么默认使用 --mixed 参数。

示例
# 将分支回退到指定提交,工作区维持现状不变,暂存区会在现有基础上增加该commit之后的提交。
# 例如提交了两次,id为commit_id_1、commit_id_2

# 将分支回退到指定提交commit_id_2,暂存区和工作区都会被同步为该指定的提交
git reset --hard commit_id_2

# 想要commit_id_2的提交回到工作区则需执行
git reset --soft commit_id_1

# (默认操作,参数--mixed可不加)将分支回退到指定提交,暂存区也被同步为该指定提交,工作区保持不变
git reset --mixed commit_id_2

# 执行完之后不能git pull,否则又会把远程的拉到本地,这里应该强制推送到远程覆盖掉
git push origin/test -f

2、合并代码的三种方法

区别
如果需要另一个分支的所有代码变动,那么就采用合并

merge: 保持修改内容的历史记录,但是历史记录会很复杂。
rebase: 历史记录简单,是在原有提交的基础上将差异内容反映进去。

想简化合并的历史记录就用rebase。

只需要部分代码变动(某几个提交),这时可以采用 Cherry pick
具体操作
# 仓库有 master 和 feature 两个分支
a - b - c - d   master
     \
      e - f - g feature
           
# 将 feature 分支合并到 master 分支
# 切换到 master  分支
git checkout master

# merge
git merge feature

# rebase
git rebase feature

# cherry-pick
# 现在将提交f应用到 master 分支
# Cherry pick 操作
git cherry-pick f

# 合并多个提交
git cherry-pick e f

# 合并一系列连续的提交
# 下面这个不包含 e
git cherry-pick e..g
# 包含 e
git cherry-pick e^..g
取消合并
git merge --abort
git rebase --abort
git cherry-pick --abort

3、重置分支

用master重置test分支

# 先切换到test分支
git checkout test
# 再将本地的test分支重置成远程的master
git reset --hard origin/master
# 最后推送到远程test分支
git push origin/test --force 

4、暂存代码

# 暂存
git stash
或
git stash save “修改的信息"

# 弹出代码
git stash pop
或
git stash list
git stash apply stash@{0}

5、Git放弃修改

取消已提交到暂存区的修改
# 1、先获取到远程的所有更新
git fetch --all
# 2、指向远程库origin的master(可更改成自己想要取的远程分支)
# 执行需要被远程哪个分支给覆盖掉
git reset --head origin/master
# 3、更新到本地
git pull
取消还在工作区的修改
git checkout .   

其他命令

# 创建分支
git checkout -b f-dev-001
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值