git使用

作者: z小牛 | 来源:发表于2017-12-22 10:05 被阅读14次

    本文通过以下四个部分讲解git的使用

    Git配置    Git使用场景    Git分支管理方法    常用git命令

    在讲解之前,先看下这张图

    git流程

    Remote远程仓库    Repository本地仓库   Index/Stage暂存区   Workspace工作区

    一般使用git有远程仓库的情况下,都要先从远程仓库clone到本地仓库。然后切换(checkout)到需要做开发的分支,进行开发工作,开发工作都是在工作区进行的。开发时如果需要提交,需要先把修改添加到暂存区(add),如果需要提交暂存区的修改到历史区,使用commit命令提交。最后使用push推送到远程仓库。别人如果需要拉取你提交的代码,使用pull拉取到自己的工作区。

    一 、git配置

    这个name和email只是一个标识,公司项目开发中尽量配自己的名字全拼和公司邮箱,方便git log查看

    #显示当前的git配置

    git config –list

    #设置提交代码时的用户信息

    git config [--global] user.name “YourName”

    git config [--global] user.email “Your Email Address”

    如果不加—global是配置当前项目,当前项目的配置会覆盖全局的

    如果用户信息配置有误,可使用上面命令重新设置覆盖之前的信息。

    如果操作无效,尝试下下面的命令

    git config [--global] –replace-all user.name “Your Name”

    git config [--global] –replace-all user.email “Your Email Address”

    二、分支管理 

    参考连接地址https://kb.cnblogs.com/page/132209/

    git分支管理

    1) 主分支Master

    首先,代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。

    2) 开发分支Develop

    从开发分支(develop)应该总能够获得最新开发进展的代码。

    3) 临时性分支

    前面讲到版本库的两条主要分支:Master和Develop。前者用于正式发布,后者用于获取最新开发进展。其实,常设分支只需要这两条就够了,不需要其他了。

    但是,除了常设分支以外,还有一些临时性分支,用于应对一些特定目的的版本开发。临时性分支主要有三种:

    *功能(feature)分支

    *预发布(release)分支

    *修补bug(fixbug)分支

    这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop。

    第一种是功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。

    功能分支的名字,可以采用feature-*的形式命名。有新需求的时候新建功能分支

    “Feature branches”起源于“develop”分支

    “Feature branches”最终也归于“develop”分支

    第二种是预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。

    预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release-*的形式。

    “Release branch”,起源于develop分支,最终归于“develop”或“master”分支

    “Release branch”产生新提交的最好时机是“develop”分支已经基本到达预期的状态,至少希望新功能已经完全从“Feature branches”合并到“develop”分支了

    经过若干bug修复后,“Release branches”上的代码已经达到可发布状态,此时,需要完成三个动作:第一是将“Release branches”合并到“master”分支,第二是一定要为master上的这个新提交打TAG(记录里程碑),第三是要将“Release branches”合并回“develop”分支

    最后一种是修补bug分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。

    修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用fixbug-*的形式。

    三、Git使用场景

    git场景操作,分以下几个场景介绍

    新建分支做开发

    远程已有该分支,我本地[[没有]],需要做后续开发

    远程已有该分支,我本地[[]],需要做后续开发

    开发中。需要修改紧急bug

    冲突处理

    上线

    看场景之前,先看下下面两个命令的效果

    git pull --rebase   http://blog.csdn.net/hudashi/article/details/7664631/

    git merge –no-ff branch-name   http://blog.csdn.net/hudashi/article/details/7664382

    1) 新建分支做开发

    #首先确保本地没有被修改的文件                                                                                                                         git status

    #切换分支 从哪个分支新建分支,切换到哪                                                                                                          git checkout branch-name

    #拉取远程分支并合并    如遇冲突参考冲突解决                                                                                                      git pull --rebase

    #新建并切换到开发分支                                                                                                                                        git checkout –b new-branch-name

    #本地开发

    #添加到暂存区  将所有新增/修改/删除的文件提交到暂存区                                                                                git add –A或者git add . 

    #将暂存区的文件提交到历史区                                                                                                                                git commit –m ‘commit code for …’ 

    #推送本地开发分支并与远程库建立关联                                                                                                                git push –u origin new-branch-name

    2) 远程已有该分支,我本地[[没有]],需要做后续开发

    #首先确保本地没有被修改的文件                                                                                                                         git status

    #切换分支 从哪个分支新建分支,切换到哪                                                                                                            git checkout branch-name

    #拉取远程分支并合并,如遇冲突,参考冲突处理                                                                                               git pull --rebase 

    #查看所有远程分支                                                                                                                                                   git branch –r 

    #新建并切换到本地分支,跟远程分支建立关联关系。                                                                                              #本地分支名(local-branch-name)尽量跟远程分支名(remote-branch-name)保持一致                                            git checkout -b local-branch-name --track origin/remote-branch-name

    #本地开发

    #添加到暂存区  将所有新增/修改/删除的文件提交到暂存区                                                                                git add –A或者git add .

    #将暂存区的文件提交到历史区                                                                                                                                git commit –m ‘commit code for …’

    #拉取远程分支并合并,如遇冲突,参考冲突处理                                                                                                 git pull --rebase

    #否则执行下面命令   注意有可能服务器会Reject你的代码提交,如果是被Reject的话,先执行git pull --rebase  git push

    3)远程已有该分支,我本地[[有]],需要做后续开发

    #首先确保本地没有被修改的文件                                                                                                                            git status

    #切换到该开发分支                                                                                                                                                  git checkout branch-name

    #注意有可能有冲突,如遇冲突,参考冲突处理                                                                                                       git pull --rebase

    #本地开发

    #添加到暂存区  将所有新增/修改/删除的文件提交到暂存区                                                                                git add –A或者git add .

    #将暂存区的文件提交到历史区                                                                                                                                git commit –m ‘commit code for …’

    #拉取远程分支并合并,如遇冲突,参考冲突处理                                                                                                 git pull --rebase

    #否则执行下面命令   注意有可能服务器会Reject你的代码提交,如果是被Reject的话,先执行git pull --rebase  git push

    4)开发中。需要修改紧急bug

    #储藏本地修改                                                                                                                                                        git stash

    #切换到master分支                                                                                                                                                  git checkout master

    #拉取远程分支并合并,如遇冲突,参考冲突处理                                                                                                  git pull --rebase

    #新建bug处理解决分支并切换到该分支                                                                                                                git checkout –b fixbug-*

    #修改bug

    #添加到暂存区  将所有新增/修改/删除的文件提交到暂存区                                                                                git add –A或者git add .

    #将暂存区的文件提交到历史区                                                                                                                                git commit –m ‘commit code for …’

    #推送本地开发分支并与远程库建立关联                                                                                                                git push –u origin fixbug-*

    #返回原分支继续开发

    git checkout branch-name

    git stash pop(恢复的同时删除stash内容)

    5) 冲突处理:

    #如果在合并代码时遇到冲突,请仔细阅读该命令的输出:输出会有类似conflict的字样,对每一个标注conflict的文件,仔细阅读其内容,然后把不需要的代码删除掉,保留最终的代码。如果不确定要保留哪块代码,可以在群里问。在冲突文件中搜索<<<<确保冲突的代码是否全部解决完。

    冲突

    (1) 使用git merge --no-ff branch-name引起的冲突

    当前更改是你修改的内容,传入的更改是别人的修改

    如果不知道怎么解决冲突,可以使用git merge --abort终止合并。否则执行下面完成冲突解决

    #确保所有的冲突文件都已经被统一之后,使用下面的代码再次提交:                                                                git add -A && git commit -m 'merge code'

    #然后再次拉取远程分支跟本地分支做合并,如遇冲突,参考冲突处理。                                                              git pull --rebase

    #否则执行下面命令   注意有可能服务器会Reject你的代码提交,如果是被Reject的话,先执行git pull --rebase  git push

    (2) 使用git pull –rebase引起的冲突

    当前更改是别人的修改,传入的更改是你修改的内容

    如果不知道怎么解决冲突,可以使用git rebase --abort终止合并。否则执行下面完成冲突解决

    #确保所有的冲突文件都已经被统一之后,使用下面的代码修改文件添加到暂存区:                                          git add –A

    #然后使用下面命令继续执行(千万不要使用git rebase --skip)                                                                                  git rebase --continue

    #然后再次拉取远程分支跟本地分支做合并,如遇冲突,参考冲突处理。                                                              git pull --rebase

    #否则执行下面命令   注意有可能服务器会Reject你的代码提交,如果是被Reject的话,先执行git pull --rebase  git push

    注:有时候执行merge时会出现下面的弹框,输入merge的描述信息

    merge文案弹框

    6)上线

    git checkout master

    git pull --rebase

    #在master分支上合并准备上线的分支   如遇冲突,参考冲突解决                                                                          git merge –no-ff branch-name

    #在master分支上打标                                                                                                                                          git tag -a tag-name -m 'tag描述'

    git push origin tag-name

    git checkout develop

    git pull --rebase

    #在develop开发分支上合并准备上线的分支   如遇冲突,参考冲突解决git merge –no-ff branch-name

    #删除本地和远程bug分支或者release分支

    git branch –D branch-name

    git push origin :branch-name

    四、常用git命令如下

    1) git stash#储藏

    #查看现有的储藏                                                                                                                                                    git stash list

    #应用最近的储藏                                                                                                                                                  git stash apply

    #应用指定名字的储藏                                                                                                                                            git stash apply [stash-name]

    #移除最近的储藏                                                                                                                                                    git stash drop

    #移除指定名字的储藏                                                                                                                                              git stash drop [stash-name]

    #应用并移除储藏                                                                                                                                                  git stash pop

    2)分支

    #列出所有本地分支                                                                                                                                                $ git branch

    #列出所有远程分支                                                                                                                                                $ git branch -r

    #列出所有本地分支和远程分支                                                                                                                                $ git branch -a

    #新建一个分支,但依然停留在当前分支                                                                                                               $ git branch [branch-name]

    #新建一个分支,并切换到该分支                                                                                                                            $ git checkout -b [branch-name]

    #新建一个分支,与指定的远程分支建立追踪关系                                                                                                  $ git branch --track [branch] [remote-branch]

    #切换到指定分支,并更新工作区                                                                                                                          $ git checkout [branch-name]

    #建立追踪关系,在现有分支与指定的远程分支之间                                                                                             $ git branch --set-upstream [branch] [remote-branch]

    #合并指定分支到当前分支(默认是快进合并,使用—no-ff是正常合并,建议使用正常合并)                                 $ git merge --no-ff [branch]

    #删除本地分支                                                                                                                                                        $ git branch -d [branch-name]

    #强制删除本地分支                                                                                                                                                  $ git branch -D [branch-name]

    #删除远程分支                                                                                                                                                       $ git push origin :[remote-branch] 或 git push origin –delete [remore-branch]

    3) 撤销

    #撤销工作区指定文件的修改                                                                                                                                  $ git checkout [file]

    #撤销工作区所有文件的修改                                                                                                                                  $ git checkout .

    #重置暂存区的指定文件,与上一次commit保持一致,但工作区不变                                                                    $ git reset [file] 或 git reset HEAD [file]

    #重置暂存区与工作区,与上一次commit保持一致                                                                                                $ git reset –hard

    #回退到之前的版本   一个^表示一个版本,可以多个  或  n表示数字向上回退几个版本                                        git reset HEAD^ 或 git reset HEAD~n

    (1)soft参数:git reset --soft HEAD~1将版本库软回退1个版本,软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区

    (2)默认的mixed参数:git reset HEAD~1,将版本库的头指针全部重置到指定版本,切回重置暂存区,即这次提交之后的所有变更都移动到未暂存阶段

    (3)hard参数:git reset --hard HEAD~1,将版本库回退1个版本,将本地版本库的头指针全部重置到指定版本,重置暂存区,工作区代码也会退到这个版本

    4)标签

    #列出所有标签                                                                                                                                                        $ git tag

    #列出符合模式的标签                                                                                                                                              $ git tag -l ‘v0.1.*’

    #创建轻量标签                                                                                                                                                        $ git tag [tag-name]

    #创建附注标签                                                                                                                                                        $ git tag -a [tag-name] -m “tag-describe”

    #查看标签                                                                                                                                                                $ git show [tag-name]

    #删除标签                                                                                                                                                                git tag -d [tag-name]

    #给指定的commit id打标                                                                                                                                          $ git tag [tag-name] [commit-id]

    通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作:

    #将指定标签提交到git服务器                                                                                                                                 $ git push origin [tag-name]

    #将本地所有标签一次性提交到git服务器                                                                                                                 $ git push origin –tags 

    5)git remote

    #查看remote地址,远程分支,还有本地分支与之相对应关系等信息                                                                      git remote show origin

    #删除远程仓库已经不存在,但是本地git branch -r可以看到的远程分支                                                                git remote prune origin

    参考文章 

    http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html

    https://kb.cnblogs.com/page/132209/

    http://blog.csdn.net/hudashi/article/details/7664631/

    http://blog.csdn.net/hudashi/article/details/7664382

    相关文章

      网友评论

        本文标题:git使用

        本文链接:https://www.haomeiwen.com/subject/osopwxtx.html