git命令
git命令总览
序号 | 目的操作 |
---|---|
1 | 多人协同github开发 |
2 | 多人协同远程私人服务器开发 |
3 | 指定远程仓库origin |
4 | push |
5 | 分支操作 |
6 | 本地与远程分支对应 |
7 | 分支开发后merge到master |
8 | 修改本地以及远程分支名称 |
9 | 新总结的git命令 |
1.多人协同github开发
四步走原则:本地分支开发,本地主干拉取最新的远程主干+本地主干merge本地分支,本地主干向远程主干发布,切换并同步分支
具体操作如下:
0.确保本地分支和远程分支一致(git checkout dev_braincao && git pull),开始在本地分支上开发(修改、写作、删除等)
1.开发完成,本地切换到主干(git checkout master),拉取最新的远程主干(git pull),本地主干merge本地分支(git merge dev_braincao),并解决冲突(即git add . && git commit -m '...')
2.此时本地主干可以进行远程发布了,本地主干向远程主干发布(git push)
3.最后一步将同步远程分支和本地分支,保证一致(git checkout dev_braincao && git merge master && git add . && git commit(这里不用再写-m了) && git push)。此时本地在dev_braincao分支上,刚好无缝接入步骤0
2.多人协同远程私人服务器开发
1.当本地的项目想git上传到远程仓库,但是远程仓库现在没有的话,需要以下操作:
0.远程建项目同名文件夹,git init
1.远程.git/config配置(这是由于git默认拒绝了push操作,需要进行设置):
[receive]
denyCurrentBranch = ignore
2.本地push到远程
2.远程git reset --hard才能看到push后的内容
2.然后本地和远程都是master分支,应该本地和远程都建立分支,按上面建分支的操作来就行
3.本地有分支,远程有分支,每次git push的时候push的分支必须不是远程所在分支(你想啊,这样的话你改了别人正在用怎么办),所以正常来讲远程一直在master分支上,然后本地dev1分支push,远程merge即可。
3.指定远程仓库origin
git remote add origin git@github.com:braincao/mmall.git
4.push
git push -u origin master
但是push前有可能需要先pull,这里用–rebase操作:
git pull --rebase origin master
解决冲突后再push即可
5.分支操作
查看所有分支git branch -a
删除本地分支git branch -d dev
删除远程分支git push origin --delete dev
6.本地与远程分支对应
一般情况是分支开发,主干发布,因此建立远程分支,在远程分支上开发push,在远程主干上发布push。
创建分支加切换分支的合并命令git checkout -b <new_branch> [<start point>]
本地建立并切换到v1.0分支,初始start point基于master分支git checkout -b v1.0 master
之后再把本地建立的分支推送到origin,即远程也建立了v1.0分支并与其对应git push origin HEAD -u
查看分支与远程分支追踪状态git branch -vv
设置远程跟踪。push的时候可以指定本地分支与远程的其他分支发生关系git branch --set-upstream-to=origin/<branch> master
设置本地分支master跟踪origin/
删除远程仓库文件,但不删本地资源。有时本地push到远程仓库时,本地不存在但远程仓库存在的文件没法更新,也删不掉,这时需要把远程仓库的指定文件删除,用以下命令(这里删除远程仓库的/target文件夹):git rm -r --cached /target*
7.分支开发后merge到master
merge前先git diff branch1 branch2
查看两个分支的修改diff,看diff没问题后再merge
1.切换到git checkout master
2.把本地的分支合并到mastergit merge branchXXX
,这个地方需要解决conflicts,解决完git commit
3.把本地的master同步到远程git push origin master
8.修改本地以及远程分支名称
修改分支名称总共分三步:
git branch -m old_branch new_branch #修改本地分支名
git push origin :old_branch #删除远程分支
git push --set-upstream origin new_branch #新建远程分支
9.新总结的git命令
切记:
dev上push前要经常rebase变基,养成好习惯
方法:git checkout dev && git rebase master
自己总结的流程:
本地dev开发完成,
先在master上git pull更新
然后在dev上 git rebase master变基
然后dev上push,提交MR
放弃修改:
git checkout -- file 回到最近一次git commit或git add时的状态
放弃add:
git reset HEAD file
放弃commit(版本回退):
git reset --hard HEAD^/1g0a1
merge(禁用fast-forword模式,留下合并历史):
git merge --no-ff -m "merged bug fix 101" feature_name
merge后有冲突解决即可:git add + git merge --continue 不用再commit || git add + git commit -m ""
创建远程分支(本地分支push到远程)并关联起来:
git push --set-upstream(-u) origin [name]
删除远程分支:
git push origin :[name]
修复一个Bug,先保存现场,创建bug分支修复后,回到原dev分支开发:
git stash 保存现场
git stash list 查看现场
git stash pop 恢复的同时把stash内容也删了(git stash apply 恢复现场 + git stash drop 删除现场)
git stash apply stash@{0} 多次stash后指定恢复现场
复制指定的一次/多次commit到当前分支,避免全部merge一个分支(有冲突解决即可git cherry-pick --continue)
git cherry-pick 9b47dd dd4e49
tag标签:
git tag v1.0 59abc158b 给某个commit打tag,不指定commit号的话是当前最新一次commit
git tag -a v0.1 -m "version 0.1 released" 1094adb //-a指定标签名,-m 指定说明文字
git show <tagname> 通过标签查commit信息
git push origin v1.0 将指定的几个tag提交到远程
git push origin –-tags 将本地所有标签一次性提交到远程
git tag -d v1.0 删除标签
git push origin :refs/tags/v0.9 删除远程标签
注:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
rebase变基:
基于master开发自己的dev分支时,dev要push,此时master已经更新了
笨的方法时,pull master后再在dev上merge master,再dev push-->笨且提交历史线很多,前后顺序有时也要考虑,diff时也要三方对比
推荐:dev在push前进行rebase将master的基变成最新的,这时在dev push时就已经包含了团队更新后的master,且提交历史干净,两根线变一根线
原理:找到dev与master最新commit的最近公共祖先point,将dev上在point之后的所有commit全部移动到master分支的最新commit之后,即只有一根线了
方法:git checkout dev && git rebase master
自己总结的流程:
本地dev开发完成,
先在master上git pull更新
然后在dev上 git rebase master变基
然后dev上push,提交MR
git fetch:
这将更新git remote 中所有的远程仓库所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中
git pull:
比对本地与远程的FETCH_HEAD记录fetch后并merge
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
详见(https://www.cnblogs.com/kevingrace/p/5896706.html)
其他操作命令:
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
git remote add origin git@gitee.com:liaoxuefeng/learngit.git
git remote -v 看远程详细信息,可用于查看是否有fetch/push权限,也可用于指定同时开发多个远程库
git branch --set-upstream branch-name origin/branch-name 关联的操作
push远程时要先pull
git checkout commitId/v0.21 此时会指向指定版本/tag时的代码状态(但现在处于一个空的分支上),用于查看指定版本状态
关于github:
参加开源项目时先Fork到自己仓库,clone代码到本地开发后push到自己远程,之后推送pull request给官方仓库来贡献代码
欢迎转载,欢迎错误指正与技术交流,欢迎交友谈心
文章标题:git命令
文章字数:2k
本文作者:Brain Cao
发布时间:2018-02-22, 19:29:01
最后更新:2020-02-27, 18:31:07
原始链接:https://braincao.cn/2018/02/22/git-orders/版权声明:本文为博主原创文章,遵循 BY-NC-SA 4.0 版权协议,转载请保留原文链接与作者。