美文网首页程序员前端利器
git分布式版本库管理

git分布式版本库管理

作者: js_hcl | 来源:发表于2019-01-29 14:57 被阅读34次

    前言:Git操作好在会一路提醒(操作结果,撤销提醒,配置提醒等),本文章意在看懂其提醒,且覆盖平常的操作及相关配置或使用。

    零、配置

    1.操作

    • git config 命令用于获取并设置存储库或全局选项。这些变量可以控制Git的外观和操作的各个方面

    配置作用域
    --system 系统配置(所有用户)
    --global 当前用户
    --local 当前仓库
    (默认是添加在 local 配置中)

    git config [--local|--global|--system] --edit可以进入编辑模式,及可以看到对应配置所在的目录位置

    • --system配置。在git安装目录下/Git/mingw64/etc/gitconfig
    • --global配置。在当前用户目录下C:/Users/Administrator/.gitconfig
    • --local配置。在当前项目目录下.git/config

    默认编辑器的使用下面有介绍

    查看配置
    1.查看所有配置git config [--local|--global|--system] --list
    . git config --list 列出该处找到的所有设置(不会覆盖)

    • git config --system --list 查看系统配置(所有用户)
    • git config --global --list 查看当前用户配置
    • git config --local --list 查看当前仓库配置

    2.查看特定Key的配置git config [--local|--global|--system] {key}

    • git config {key} 列出该处找到的所有指定key值(会覆盖,该作用域有多个该值也只会返回一个值)
    • git configc --system {key} 列出该作用域的指定key值
    • 其它作用域略

    3.查看特定Key的所有配置 git config [--local|--global|--system] --get-all {key}

    • git config --get-all {key} 列出该处找到的所有指定key值(不会覆盖)
    • git config --system --get-all {key} 列出该作用域的所有指定key值(不会覆盖)
    • 其它作用域略

    4.添加配置项
    格式:git config [--local|--global|--system] --add section.key value

    5.修改配置项
    格式:git config [--local|--global|--system] section.key value

    6.清除配置项
    格式:git config [--local|--global|--system] --unset {key}
    如果该key有多个值,要删除某个值
    则:git config [--local|--global|--system] --unset {key} value
    如果该key有多个值,要删除所有值
    则:git config [--local|--global|--system] --unset-all {key}

    编辑模式
    git config [--local|--global|--system] --edit
    此时会打开编辑窗口,底下可以看到配置文件的所在目录
    默认编辑器的使用教程
    修改默认编辑器:git config [--local|--global|--system] core.editor code 前提是配置了该code的path路径

    2.相关配置说明

    1. user.name 及user.email 即:告诉git Who Are You(作为联系方式时的名字及邮箱,与远程仓库的邮箱无关)
      如果没有配置联系方式,则git commit时,会提示要先配置
    2. 查看所有远程仓库默认追踪的主机及远程分支 git config --list拉到底下会看到

    remote.hcl.url=https://github.com/zwyellin/hu.git //配置了的主机
    remote.hcl.fetch=+refs/heads/:refs/remotes/hcl/
    remote.origin11.url=https://github.com/zwyellin/hu1.git //配置了的主机
    remote.origin11.fetch=+refs/heads/:refs/remotes/hcl/


    branch.master.remote=origin11 //绑定的默认主机
    branch.master.merge=refs/heads/dev1 //这里是绑定的远程分支
    push.default=upstream //这里是push方式:有simple nothing等具体看下面push部分
    branch.tt.remote=origin11
    branch.tt.merge=refs/heads/dev1
    branch.jj.remote=origin11
    branch.jj.merge=refs/heads/kk
    branch.vv.remote=origin11
    branch.vv.merge=refs/heads/vv

    本地分支与远程仓库联系关系总结

    • git config --list拉到底下会看到所有远程仓库本地分支默认追踪的主机及远程分支
    • 查默认追踪:或者git status 底下可以看到
    • git branch -a查看所有分支
    • git remote -vv查看所有远程仓库
    • git branch -vv查看本地分支默认追踪的主机及远程分支
    • git remote show 主机名查看远程主机及分支对应的本地分支

    这边补充查看本地是不是最新代码(其它同事push上去的)
    切换分支时,可以看到底下的提示。如下:

    • Your branch is behind 'origin/master' by 30 commits, and can be fast-forwarded.
      (use "git pull" to update your local branch)
      说明:你的分支落后于远程仓库30个版本,并且可以快进模式(采用git pusll 来更新你的本地分支)

    一.初始化

    1.操作

    • 创建版本库:git init
    • 如果创建成功,底下紧接会出现:Initialized empty Git repository in <file>

    2.查看情况

    git status 查看状态信息

    nothing to commit (create/copy files and use "git add" to track)


    说明:
    track英 [træk] 追踪
    即:创建或者copy文件,然后使用git add命令追踪文件

    二、提交追踪(第一次提交到暂存区)

    1.操作

    • 添加到暂存区:git add <file>git add test.txtgit add .
    • 如果添加成功,表面没有任何反应
    • 说明: 如果没有配置用户名和eamil,则会提示,配置好即可

    2.查看情况

    git status 查看状态信息

    Changes to be committed:
    (use "git rm --cached <file>..." to unstage)
    new file: test.txt


    说明:

    • Changes to be committed:等待commit
    • (use "git rm --cached <file>..." to unstage) 可以把add 提交追踪命令撤销
    • new file: test.txt:此时,被追踪文件的文件名为绿色

    3. 相关操作

    git rm --cached <file>
    说明:删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制
    即:可以把add 提交追踪命令撤销


    相关命令
    git rm <file>
    说明:删除暂存区或分支上的文件, 同时工作区也不需要这个文件了

    说明:任何修改,都要commit与版本库保持一致。

    三、提交到版本库

    1.操作

    • 添加到版本库:$ git commit -m '这里是这次提交的说明'
    • 如果添加成功,底下紧接会出现:

    [master (root-commit) 62a5a89] 这里是这次提交的说明
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 test.txt


    说明:

    • [master (root-commit) 62a5a89] 这里是这次提交的说明 这个是这次提交的信息
    • 1 file changed, 0 insertions(+), 0 deletions(-) 变动情况 (有:增删改)
    • create mode 100644 test.txt

    说明:
    使用命令git add <file>,注意,可反复多次使用,添加多个文件;
    然后使用命令git commit -m <message>,提交到版本库。

    2.查看情况

    git status 查看状态信息

    nothing to commit, working tree clean


    说明:

    • nothing to commit, working tree clean 没有要提交的了,工作区干净

    四、修改,git state(和初始化时对比)

    1.修改文件

    。。。

    2.查看情况

    git status 查看状态信息

    Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)
    modified: test.txt


    说明:

    • (use "git checkout -- <file>..." to discard changes in working directory) (使用“git checkout - <file> ...”来丢弃工作目录中的更改)

    3. 相关操作

    git checkout -- <file>
    说明:从暂存区复原到工作区
    对比:git checkout 分支名 这个是切换分支


    相关命令
    git reset HEAD <file>
    说明:从版本库复原到暂存区
    对比: git reset --hard HEAD^ 这个是版本回退


    即:如果还木有commit,都可以撤销。从暂存区复原和从版本库复原,并且这两个命令都有其它作用

    五、修改,并且git add了(和第一次add对比)

    1.操作

    • 添加到暂存区:git add <file>git add test.txtgit add .
    • 如果添加成功,表面没有任何反应

    2.查看情况

    git status 查看状态信息

    Changes to be committed:对比 一样
    (use "git reset HEAD <file>..." to unstage)对比 (use "git rm --cached <file>..." to unstage)
    modified: test.txt 对比 new file: test.txt


    对比下来:差不多,第一次提交会提示你git rm --cached <file>可以撤销版本跟踪,new file: test.txt

    3. 相关操作

    git reset HEAD <file>
    说明:从版本库复原到暂存区
    对比: git reset --hard HEAD^ 这个是版本回退


    相关命令
    git checkout -- <file>
    说明:从暂存区复原到工作区
    对比:git checkout 分支名 这个是切换分支


    即:如果还木有commit,都可以撤销。从暂存区复原和从版本库复原,并且这两个命令都有其它作用

    六、修改,并且git commit了(和第一次commit对比)

    1.操作

    • 添加到版本库:$ git commit -m '这里是这次提交的说明'
    • 如果添加成功,底下紧接会出现:

    [master a1f8a81] 这里是这次提交的说明 对比 [master (root-commit)62a5a89] 这里是这次提交的说明
    1 file changed, 2 insertions(+), 1 deletion(-) 对比 1 file changed, 0 insertions(+), 0 deletion(-)
    对比 create mode 100644 test.txt


    说明:

    • (root-commit)说明该本地库第一次提交,而非后续的提交
    • [master a1f8a81] 这里是这次提交的说明 这个是这次提交的信息
    • 1 file changed, 0 insertions(+), 0 deletions(-) 变动情况 (有:增删改)
    • create mode 100644 test.txt

    对比下来:差不多,第一次提交会提示你这个是第一次提交:root-commit、create mode 100644 test.txt

    2.查看情况

    git status 查看状态信息

    nothing to commit, working tree clean


    说明:

    • nothing to commit, working tree clean 没有要提交的了,工作区干净

    七、已经提交两次了,查看版本

    1.操作

    • 查看提交历史:$ git log
    • 底下紧接会出现:

    commit ae7586b9ec516ecbe98ad96a1a248c3aea61c3c5(HEAD -> master)
    Author: 这里是用户名 这里是用户邮箱
    Date: Wed Jan 30 10:37:08 2019 +0800
    第二次提交
    commit 93ad57c2c11647e74b2cae4dfbe0e24e1c68a2e8
    Author: 这里是用户名 这里是用户邮箱
    Date: Wed Jan 30 10:36:28 2019 +0800
    第一次提交


    说明:

    • (HEAD -> master) 表示这个版本号为当前版本,并且分支为master
    • commit ae7586b 这个是提交的版本号(版本号我们使用可以取前7位即可)
    • 作者的名字和电子邮件地址
    • 提交时间
    • 显示提交说明

    相关命令
    查看提交日志:$ git reflog
    查看对比


    对比

    • $ git log 是版本库从HEAD查所有的提交(即:只能查到在版本库里面的)
    • $ git reflog 是查看提交的日志,包括删除的,保存在本地

    2. 相关操作

    git reset --hard HEAD^ 版本回退
    eg:git reset --hard HEAD^/git reset --hard HEAD^^/git reset --hard HEAD~2/git reset --hard commitID
    说明:版本回退

    操作后信息
    HEAD is now at 93ad57c 第一次提交 即HEAD指向了版本号为93ad57c的版本号

    对比:git reset HEAD <file> 这个是从版本库复原到暂存区

    八、创建分支及提交到远程仓库

    1.操作

    • 创建分支:$ git branch 分支名$ git branch dev
    • 如果添加成功,表面没有任何反应
    • 这边补充,如果远程仓库还没有在本电脑生成凭据
      则,第一次git push, 则,要填写远程仓库的登入
      查看及编辑该凭据查看下面介绍。

    2.查看分支

    git branch 查看本地分支

    dev
    * master 带*的为当前分支


    branch命令总结

    • $ git branch <BranchName> 创建本地分支
    • $ git push origin 本地分支名:远程分支名 创建远程分支

    • $ git branch -d <BranchName> 删除本地分支
    • $ git push origin --delete dev2 删除远程分支
    • $ git push origin :<old_branch> 提交空分支到远程已有分支,即相当于置空即:删除

    :(改名字)

    • $ git branch -m <old_branchName> <new_branchName> 修改本地分支名
    • 1.删除远程分支 ; 2.再次提交本地分支到远程 修改远程分支名

    • git branch 查看本地分支
    • git branch -a 则显示本地和远程分支
    • git branch -vv(两个v),就能够看到本地分支跟踪的远程分支

    和远程建立联系

    • $ git push --set-upstream <remote> 本地分支:远程分支
      --set-upstream 简写-u
    • $ git branch -vv 查看当前分支追踪的远程分支 √

    本地分支与远程仓库联系关系总结

    • git config --list拉到底下会看到所有远程仓库本地分支默认追踪的主机及远程分支
    • git branch -a查看所有分支
    • git remote -vv查看所有远程仓库
    • git branch -vv查看本地分支默认追踪的主机及远程分支
    • git remote show 主机名查看远程主机及分支对应的本地分支

    总结

    • git branch 用于增删改查分支。及和远程仓库建立联系
    • git push命令用于将本地分支的更新,推送到远程主机
    • $ git push <远程主机名> <本地分支名>:<远程分支名>
    • 说明:从本地仓库推送到远程仓库

    相关命令

    • $ git pull <远程主机名> <远程分支名>:<本地分支名>
    • 说明:从远程仓库更新本地仓库

    总结

    • 这两个命令就是建立本地仓库和远程仓库的联系
    • 也可以省略不写远程分支名,则默认提交到和本地分支同名的分支(没有则创建)
    简化版的push、pull
    1.省略不写远程主机及分支:则要配置远程分支
      $ git push --set-upstream <remote> 本地分支:远程分支
      简写:$ git push -u <remote> 本地分支:远程分支
      则下次可以直接使用:$ git push 
    
    2.如果本地分支名和远程分支名不一样。则还要配置:
         git config --global push.default upstream
      网址:https://www.jianshu.com/p/b4e3b6bba837
    
    查看配置:
    >>branch.master.remote=origin11   //`绑定的默认主机`
    >>branch.master.merge=refs/heads/dev1 //`这里是绑定的远程分支`
    >>push.default=upstream  //`这里是push方式:`
    
    push.default可用的值如下:
        1.nothing  不推送,出错会提醒,相当于提交测试
        2.current  推送当前分支到接收端名字相同的分支。
        3.upstream  推送当前分支到上游@{upstream}:即可以不用同名字
        4.simple  推送当前分支到上游相同的分支:即必须同名(没有创建)。默认值
        5.matching  推送本地仓库和远程仓库所有名字相同的分支。
    
    这边补充关于远程仓库的用户名和密码的保存问题
    
    1.***查看保存位置:控制面板\用户帐户\凭据管理器 点击windows凭据
    
    2.***可以修改,及删除该凭据
    
    

    远程仓库的用户名和密码的保存问题

    九、remote操作

    1.操作

    • $ git remote命令管理一组跟踪的存储库

    git remote add [shortname] [url]
    shortname:远程仓库的别名 url:远程仓库的地址
    其它:push 服务器 分支名。也可以为远程创建分支

    git remote remove <name>

    1.改名字git remote rename <old> <new>
    2.改地址 git remote set-url <name> <newurl> [<oldurl>]
    3.增地址 git remote set-url --add <name> <newurl> [<oldurl>] 可以同时push多个仓库

    1.查看当前的远程库git remote
    origin1
    origin2

    2.查看所有远程库详细信息git remote -vv
    origin1 https://github.com/zwyellin/last1.git (fetch)
    origin1 https://github.com/zwyellin/last1.git (push)
    origin2 https://github.com/zwyellin/last2.git (fetch)
    origin2 https://github.com/zwyellin/last2.git (push)

    3.查看某个远程库所有信息git remote show <remote> 如:git remote show origin1
    *remote origin1
    Fetch URL: https://github.com/zwyellin/last1.git
    Push URL: https://github.com/zwyellin/last1.git
    HEAD branch: master
    Remote branches: //这边列出远程的分支
    dev tracked
    dev1 tracked
    kk tracked
    master tracked
    Local branches configured for 'git pull': //这边列出pull操作时和远程建立的联系
    jj merges with remote kk
    master merges with remote dev1
    tt merges with remote dev1
    Local ref configured for 'git push'://这边列出push操作时和远程建立的联系
    master pushes to master (up to date)


    本地分支与远程仓库联系关系总结

    • git config --list拉到底下会看到所有远程仓库本地分支默认追踪的主机及远程分支
    • git branch -a查看所有分支
    • git remote -vv查看所有远程仓库
    • git branch -vv查看本地分支默认追踪的主机及远程分支
    • git remote show 主机名查看远程主机及分支对应的本地分支

    十、从远程clone一个仓库

    1.操作

    • 克隆: $ git clone <版本库的网址> <本地目录名>
    • 如果添加成功,表面没有任何反应

    十一、合并分支

    1.操作

    git merge 其它分支名 合并分支 eg:git merge prod

    • Fast-forward 快进模式
    • 格式:git merge 其它分支名git merge --ff 其它分支名的简写
    • 说明:当前分支执行prod分支。即:快进模式
    • 说明:这种情况,需要这两个分支没有冲突情况下。
    //没有冲突情况:
    Fast-forward  //这边提示,Fast-forward模式。真正的Fast-forward模式
    test.txt | 1 +
    

    //有冲突的情况:
    Auto-merging test.txt //自动合并:test.txt
    CONFLICT (content): Merge conflict in test.txt  //冲突(内容):合并冲突在text.txt
    Automatic merge failed; fix conflicts and then commit the result.//自动合并失败,修复后再提交
    
    说明:
    这个情况下,不是真正的Fast-forward模式,此时,prod分支和当前分支合并,处理冲突
    解决冲突后,在当前分支需要add commit push等操作
    

    这个情况下,不管有没有冲突,删除prod分支,则在当前分支看不到prod分支信息,除非git reflog


    • --no-ff 模式 即:not ffFast-forward非快进模式
    • git merge --no-ff -m '提交信息' 其它分支名
    • 说明:prod分支的复制文件和当前分支合并
    • 冲突情况和前面一样解决

    区别

    • Fast-forward 快进模式是直接两个分支合并:如果删了prod分支,除非git reflog ,否则看不到prod提交信息
    • --no-ff是其它分支的复制和当前分支的合并:所以,尽管删了prod分支,仍然可以看到prod提交信息
    • 补充:如果在处理冲突,则可以看到目录后面(master|MERGING) 即(当前分支|冲突中...),也可以通过git status 查看情况
    git命令窗口:
    
    Administrator@SKY-2018031619 MINGW64 /d/360MoveData/Users
    /Administrator/Desktop/gitStudy (master|MERGING)
    git status
    

    十二、stash操作

    1.操作

    缓存入栈 会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录

    1. $ git stash save <message>

    应用缓存

    $ git stash apply <stash_name>$ git stash apply默认为栈顶那个
    说明:可以多次应用,及指定应用哪个。相当于session


    对比 pop
    $ git stash pop只能应用栈顶,并且该对象出栈。即(只能应用栈顶并出栈)

    删除缓存

    1. 删除一个缓存$ git stash drop <stash_name>$ git stash drop默认为栈顶那个
    2. 清除所有缓存$ git stash clear

    查看缓存

    $ git stash list
    stash@{0}: On vv: 在stash的第二次缓存
    stash@{1}: WIP on vv: ded7993 第一次提交

    相关文章

      网友评论

        本文标题:git分布式版本库管理

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