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 版权协议,转载请保留原文链接与作者。

目录
×

喜欢请收藏,疼爱就打赏