Git工作流

153 阅读2分钟

十分钟学会正确的github工作流,和开源作者们使用同一套流程_哔哩哔哩_bilibili

一般情形

git clone 地址

git checkout -b my-feature

git diff 本地修改代码后, 使用此命令查看disk上的改变和local保存的分支代码有什么区别

git add <changeed_file> 把本地修改后的文件放到暂存区

git commit -m 'message' 添加推送信息

git push origin my-feature 将local的代码推送到远端仓库

特殊情形

分支推送到远端仓库后, 发现远端的master分支已经改变, 如何同步master分支的改变到my-feature分支中?

  1. 切换到master分支里 git checkout master
  2. 同步远端master的改变到local里 git pull origin master
  3. 回到自己的分支 git checkout my-feature
  4. git rebase master 把我的修改扔到一边, 然后把master最新的修改拿过来, 接着在这个最新修改的基础之上, 把我的commit尝试推送上去, 此过程可能有rebase conflict, 如果出现则需要我们手动选择要保留那一部分代码
  5. git push -f origin my-feature 强行push改变到my-feature分支上
  6. master分支 pull request my-feature分支的改变,
    • 原项目主人采用pull request 中的 squash and merge, 合并my-feature分支上的所有commit为一条commit, 以保持master的commit history的简洁性
  7. 删除远端的my-feature分支
  8. 删除本地的git分支 git checkout master+ git branch -D my-feature
  9. 再把远端的最新代码拉至本地git pull origin master

rebase成功后, 我们相当于是在最新的master分支上做了我们的修改, 这最大程度的保留了master分支代码的优先性, 这就是rebase相对于merge的好处

rebase -i命令可以在本地压缩所有commit成为一个commit

删除操作

Disk:

git restore <changed_file> 清除disk中的数据

Staging:

git restore --staged <changed_file> 清除所有数据

git checkout HEAD <changed_file> 撤销一步, 保留disk的数据

Local:

git reset命令: 让你退回到之前任意一个commit的状态

git reset --soft HEAD~1 撤销一步, 保留disk和staging的数据

git reset HEAD~1 撤销两步, 只保留disk的数据

git reset --hard HEAD~1 撤销三步, 清除所有数据

git revert HEAD 增加一个commit, 效果是之前commit的反作用

image.png