总结一下我常常用到的git操作。
一、常用命令
git branch -av 对比分支最后一次的commit的哈希码
git pull 拉代码更新
git status 查看缓冲池文件修改和提交状态
git add 添加到缓冲池,即commit的目标文件
git commit 本地提交
git commit -m 为提交添加说明
git commit --amend 为上一次提交修改提交说明
git push origin -u branch_name 推至远端库
git push -f 强制推,覆盖上一次push结果
git rebase -i HEAD~n 修改前N次提交历史,修改完不可恢复谨慎操作!用来合并提交使追踪log更清晰易读
git branch -d/-D name 删除分支(本地)
git checkout tag_name ,git checkout -b branch_name tag_name 拉某个tag的代码(tag相当于快照,不能直接改代码,需要创建对应分支)
git checkout file_path 修改某个已add的文件的状态为add前,修改撤销
git cherry-pick hash_code 复制某次提交至当前分支,形成一个新的commit
git remote show origin + git remote prune origin 或 git fetch -p 清除本地仍显示的远程已删除的分支名
git checkout hash_code + git tag -a tag_name tag_note + git push origin --tags 为代码的某次commit打tag
git stash 把修改和暂存临时存起来使工作区干净(commit之前的所有操作)
git stash pop取出上一次临时存起的修改
git reset --hard 回退到某次commit
git reset HEAD file_name 撤销git add,也就是绿色的path文字变红色的path文字
二、我经历过的两种使用git多人协作流程:
1,不使用fork,只在merge request的时候做权限拦截,向master或基于master的分支直接提交修改
流程:
clone master → pull更新 → 基于master或某功能分支切工作分支 → 修改本地 → rebase log → push origin branch → 网页mr至master或某功能分支切工作分支
优缺点:
流程简单,非常灵活,自己的分支push上去任何人可以看并且拉下来修改,好处是方便组内相互check,QR的时候run一遍也是十分方便,由于最终的mr操作可以设置权限,所以master代码安全性也还是有保障;不方便的是远端会产生很多人的工作分支,需要经常清理。rebase操作方便回溯历史,时间线清晰明了,但rebase操作有一定风险。
涉及到的命令:
1)建一个分支代码更新对应origin已有的同名分支并且换
git checkout -t branch_name
2)修改前N次提交历史
git rebase -i HEAD~n ,然后根据提示选择要标记文件,修改后保存退出
3)push后又有了rebase操作后需要强行覆盖push
git push -f
4)如果rebase依然没有解决时间线上混乱的情况,可以建一个干净的分支,把提交拿过来产生一个新日期的提交
git cherry-pick hash_code
2,创建fork并拥有其权限,用fork向master提交修改
流程:
将项目fork一份作为origin,原项目master设为upstream → clone origin到本地 → fetch + merge upstream保持更新→ 修改本地→ push到origin → 网页操作merge至master
优缺点:
流程严谨,工作分支只有自己有权限,所以很安全。缺点是无法组内通过运行来check,只能做读代码层面的review了。
涉及到的命令:
1)拉代码保持同步更新
2)remote 添加 upstream 为master地址
git remote add upstream url
3)推自己的新分支到gitlab
git push upstream new_branch
git remote -v
5)config配置查看 url,name,email
6)修改origin
git remote set-url origin url