11-Git

作者: XAbo | 来源:发表于2022-04-12 22:11 被阅读0次
    工作流 团队协作

    一、 【配置】

    摘抄:【工具篇 】git常用命令分享 (copyfuture.com)

    1 设置全局用户名和邮箱

    git config --global user.name xxx
    git config --global user.email xxx@xxx.com
    

    上述命令是设置全局用户名和邮箱,设置完成后,所有git仓库的用户名和邮箱都是一样的。
    建议:在公司电脑中,建议将用户名设置为姓名全拼音或者域账号,建议将邮箱设置为公司邮箱,方便团队成员快速识别。

    2 设置某个git仓库的用户名和邮箱

    如果你是某个开源项目的贡献者,每次提交代码时肯定希望显示的是自己的昵称和个人邮箱,而不是全局设置里的域账号和公司邮箱,此时则可以单独对这个git仓库设置用户名和邮箱。
    首先,切换到目标git仓库的根目录,打开终端窗口,执行如下命令:

    git config user.name xxx
    git config user.email xxx@163.com
    

    执行完命令后,查看.git文件夹下的config文件,会看到底部增加了刚刚配置的用户名和邮箱。
    注意事项:上述命令仅对当前git仓库生效,不影响全局配置。

    3 查看用户名和邮箱

    git config user.name
    git config user.email
    

    1)如果是在某个git仓库下执行上述命令,并且当前git仓库单独设置过用户名和邮箱,返回的是当前git仓库的用户名和邮箱,否则,返回的是全局的用户名和邮箱。
    2)如果不是在某个git仓库下执行上述命令,返回的是全局的用户名和邮箱。

    4 查看全部配置

    git config  --list
    

    1)如果是在某个git仓库下执行上述命令,返回的是全局配置+当前项目的配置。
    2)如果不是在某个git仓库下执行上述命令,返回的是全局配置。

    二、【拉取代码】

    1 git clone

    如果要将远程git仓库的代码克隆到本地,可以使用git clone命令,如下所示:

    git clone https://github.com/mybatis/mybatis-3.git
    

    命令执行完成后,会自动创建一个名为mybatis-3的文件夹。
    如果你想自定义生成文件夹的名字,可以进行指定,如下所示:

    git clone https://github.com/mybatis/mybatis-3.git mybatis
    

    命令执行完成后,会发现自动创建了一个名为mybatis的文件夹,而不是mybatis-3。

    2 git pull

    如果团队成员有提交代码,想要拉取最新代码到本地,可以使用git pull命令,如下所示:

    git pull
    

    三、【分支】

    image.png

    1 查看分支

    # 1)查看本地分支
    git branch
    # 2) 查看远程分支
    git branch -r
    # 3) 查看所有分支
    git branch -a
    # 4)可以通过`git branch -vv`命令来查看本地分支与远程分支的关联关系:
    git branch -vv
    

    2 创建分支

    # 1)创建本地分支(基于本地分支创建);该命令是基于当前分支创建(一般是基于master分支并保证代码最新),创建成功后仍然停留在当前分支,不会跳转到新建的分支。
    git branch fix_0609_npe
    # 2)创建本地分支(基于远程分支创建);基于远程master分支创建本地分支fix_0609_npe,并切换到分支fix_0609_npe。此时本地分支fix_0609_npe关联的远程分支是master。
    git checkout -b fix_0609_npe origin/master
    # 3)创建远程分支
    git push origin fix_0609_npe:fix_0609_npe
    # 4)本地分支与远程分支建立关联;会将本地分支fix_0609_npe与远程分支fix_0609_npe建立关联。
    git branch --set-upstream-to=origin/fix_0609_npe fix_0609_npe
    

    3 切换分支

    # 1)切换到已存在的分支
    git checkout test
    # 2)切换到不存在的分支(基于本地当前分支自动创建);基于当前分支创建新分支fix_0609_npe,并切换到该分支。
    git checkout -b fix_0609_npe
    # 3)切换到不存在的分支(基于指定远程分支自动创建)
    git checkout -b fix_0609_npe origin/fix_0609_npe
    # 4)切换到上一个分支
    git checkout -
    

    4 删除分支

    删除分支时需要先切换到其它分支,否则分支无法删除。

    git branch -d fix_0609_npe
    
    # 1)强制删除:
    git branch -D fix_0609_npe
    # 2)删除远程分支:
    git push origin --delete fix_0609_npe
    

    5 合并分支

    # 1) 切换到master分支
    git checkout master
    # 2) 将分支合并到master分支:
    git merge xxx
    # 3) 将合并之后的代码push到远程仓库:
    git push origin master
    
    
    # git pull 放弃本地修改, 全部使用远端代码
    # 1) git强制覆盖:拉取所有更新,不同步;
    git fetch --all   
    # 2)本地代码同步线上最新版本(会覆盖本地所有与远程仓库上同名的文件);git reset 指令把HEAD指向master最新版本
    git reset --hard origin/master   
    # 3) 再更新一次(其实也可以不用,第二步命令做过了其实)
    git pull   
    
    # git强制覆盖本地命令(单条执行):
    git fetch --all && git reset --hard origin/master && git pull
    

    因为git merge命令合并的是所有改动,发生冲突的几率是很高的,解决冲突非常耗时且容易出错,所以在某些场景下,可以只合并部分改动,此时可以使用git cherry-pick命令。
    以下命令,是将commit id为aa6b6922fc19173c090c64a4c1d399265e4f0500的提交合并到当前分支:

    git cherry-pick aa6b6922fc19173c090c64a4c1d399265e4f0500
    

    也可以指定多个commit id:

    git cherry-pick 12eef219da5d7f45892142ddeb107f496177274d aa6b6922fc19173c090c64a4c1d399265e4f0500
    

    6 分支冲突

    良好习惯:修改文件之前先git pull,获取远程最新的代码,同步完了之后再对代码进行修改;亦或者事先和同时操作代码的同事沟通,这样可以大概率的避免冲突的产生。
    冲突只有两种情况:1 修改相同分支的同一文件;2 合并不同分支的同一文件;

    四、【提交修改】

    # 1)提交前,可以通过`git status`查看下文件修改状态:
    git status
    # 2)然后使用`git add`命令将文件添加到暂存区:
    git add .
    # 3)然后使用git commit命令提交文件:
    git commit -m "code optimize"
    #  以上2个命令可以通过下面一行命令来实现:
    git commit -am "code optimize"
    # 4)最后执行git push命令将本地commit推送到远程分支:
    git push
    

    五、【版本回退】

    # 1) 如果代码commit之后,想撤销,可以使用`git reset`命令,命令撤销后,会保留修改的内容:
    git reset --soft HEAD^
    # 2) 如果确认不需要保留修改的内容,可以将soft换位hard:
    git reset --hard HEAD^
    

    说明:
    HEAD^表示上一个版本,即上一次commit,等价于HEAD1,如果想撤销最近2次的commit,可以使用HEAD2。也可以回退到指定的commit_id(可通过git log命令查看commit_id),如下所示:

     git reset --hard e094633609aeebd664126dfc48b602157b2dabbc
    

    说明:commit_id为e094633609aeebd664126dfc48b602157b2dabbc的内容修改还存在

    如果远程分支也要回退,需要执行以下命令:

    git push --force
    

    六、 【暂存】

    经常遇到某个需求开发了一部分代码,然后被打断去处理线上bug,此时就需要先将本地的修改暂存起来,待线上bug处理后,再将本地的修改还原,git stash命令可以完美解决这种场景。

    1 暂存修改

    # 可以使用如下命令,将本地的修改暂存起来:
    git stash
    # 但推荐暂存时添加清晰的备注,方便区分,如下所示:
    git stash save "code optimize"
    

    2 查看暂存列表

    git stash list
    

    3 应用某个暂存

    git stash apply
    
    # 默认使用第一个暂存,等价于下面这样的写法:
    git stash apply stash@{0}
    # 如果想使用其它暂存,可以指定顺序,比如第2个,就是stash@{1},依次类推:
    git stash apply stash@{1}
    说明:该命令不会将对应的暂存从暂存列表中删除
    

    4 应用并删除某个暂存

    git stash pop
    
    默认使用第一个暂存,等价于下面这样的写法:
    git stash pop stash@{0}
    如果想使用其它暂存,可以指定顺序,比如第2个,就是stash@{1},依次类推:
    git stash pop stash@{1}
    说明:该命令会将对应的暂存从暂存列表中删除
    

    5 删除暂存

    git stash drop
    
    # 默认删除第一个暂存,等价于下面这样的写法:
    git stash drop stash@{0}
    # 如果想删除其它暂存,可以指定顺序,比如第2个,就是stash@{1},依次类推:
    git stash drop stash@{1}
    # 如果想删除所有的暂存,可以执行以下命令:
    git stash clear
    

    七、【其它】

    1 清空命令行

    git clear
    

    2 查看git 版本号

    git version
    

    八、【特别注意 特别注意 特别注意 】

    1 强制覆盖本地代码与远程仓库保持一致

    如果发现远程master分支被污染后,应尽快将远程master分支还原,然后执行如下命令覆盖掉本地分支代码,与远程master分支保持一致:

    git reset --hard origin/master
    

    或者将本地master分支删除,重新基于远程master分支拉取:

    git branch -d master
    git checkout -b master origin/master
    

    2 切换分支会把未提交的文件带到其它分支

    假如在test分支修改了文件A,未提交,然后此时切换到uat分支时,如果没有冲突,文件A的修改会被带到uat分支,如果不注意的话,就容易被提交,发布到线上,造成bug。

    避免措施:

    1. 切换分支时,检查下本地文件状态,尽量不要有未提交的文件,可以stash或者commit
    2. 提交代码前,尽量比对下修改内容,避免误提交

    相关文章

      网友评论

          本文标题:11-Git

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