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