zoukankan      html  css  js  c++  java
  • 版本管理-Git的使用/配置和常用命令

    Git使用与配置

    v2.0 20201229

    安装git

    git用户配置

    设置git commit的身份和邮箱
    git config 配置有三个级别:

    • system(系统,相当于系统环境变量级别)
    • global(用户,相当于用户环境变量级别)
    • local(当前仓库)

    由于底层配置会覆盖顶层配置,应依照system->global->local的顺序设置;

    # 对当前用户进行配置:
    git config --global user.name $用户名
    git config --global user.email $邮箱
    
    # 查看配置: 
    git config --system --list
    git config --global --list
    

    远程仓库(Github、GitLab)认证

    git SSH签名

    参考:Git-设置SSH Key - Grace - CSDN博客

    ssh-keygen -t rsa -C        # 生成ssh私钥和公钥
    ssh-keygen -t rsa -b 4096 -C "email@example.com"    # 按照需要设置rsa选项生成
    cat ~/.ssh/id_rsa.pub        # 查看公钥;复制到github设置里
    # linux ~/.ssh/id_rsa.pub
    # Windows C:Users<username>.sshid_rsa
    ssh -T git@github.com     # 测试连接
    

    记录:创建私人项目A后,重置系统,使得.ssh目录下的私钥被删除后,私人项目A不能push,这时重新生成并添加ssh key。

    git GPG签名

    (有一些情况不设置这个也可以显示)

    基本命令

    git init          # 将当前文件夹建立为一个 git repo
    git clone -b $branchName $URL $localRepoName # 通过-b指定要克隆的分支,同时也可指定 clone 下来的本地 repo 文件夹名称
    git status     # 查看当前更改
    git diff $file 
    git restore .    # 丢弃(当前文件夹下的全部)修改
    git add .         # 添加(当前文件夹下的全部)文件到缓冲区
    git reset HEAD # 撤销上一次add的操作
    git commit     # 不加-m,用vim写msg,第一行是标题,后面是备注
    git commit -m "信息"
    git commit -m `...`
    git commit --amend # 更改刚刚提交的commit
    
    git fetch             # 默认 track origin(?)的指定分支,这个分支在clone 下来的时候指定了,或者在添加 remote 源的时候通过 -t 指定要 track 哪个分支;(这个分支必须要指定,否则虽然可以 fetch 但 pull 的时候不知道把哪个分支 merge 进来,不会默认 track master 分支或者同名分支;会提示使用  git branch --set-upstream-to=origin/master 这样指定)
    git merge xxx     # 合并xxx分支(的指定commit)到当前分支
        # 从目标 commit 和当前 commit (即 HEAD 所指向的 commit)分叉的位置起,把目标 commit 的路径上的所有 commit 的内容一并应用到当前 commit,然后自动生成一个新的 commit。——即merge会进行这样的动作:S1施加当前分支落后的那些commit;S2生成一个新的commit;
    git merge --abort    # merge冲突待解决状态下,使用--abort放弃这次merge
    git pull                 # pull 相当于先fetch再merge
    git log                 # 查看当前分支提交历史
    
    #####远程库#####
    git remote -v # 列出远程仓库地址
    git remote rm upstream # 删除远程仓库源地址
    git remote add upstream [需要更换远程仓库的git地址] # 添加源
    
    git push upstream dev # 把本地仓库地址 提交到新的远程仓库
    git push -u upstream dev -f # 如果我们是迁移仓库,想用原有仓库覆盖远程仓库的代码
    

    分支

    git branch $newBranchName # 创建新Branch
    git checkout $branchName # 切换到新分支
    git checkout -b $newBranchName # 如果没有会创建这个新分支
    git branch -d $branchToDelete # 删除分支
    

    Commit流程

    1. 从公共代码库 clone 代码;
    2. 使用本地 git repo 查看代码;
    3. 若有编辑代码进行调试的需求,则签出到新分支;
      3.1 编辑和调试代码;
      3.2 暂存代码更改;
      3.3 提交 commit ;
    4. 若有并入公共代码库的需求;
      4.1 fork 创建所属的 project
      4.2 在本地 git repo 添加自己的 fork 作为 remote;
      4.3 确认要 push 的 remote;
      4.4 进行 push;

    高级操作1.缩减commit次数,节省空间

    假设现有一个项目Proj,其主分支为master,处于v1版本;我在master v1版本的基础上fork出了我的项目Proj1,并在Proj1 br1分支施加了更改v1.1, v1.2, v1.3..., v2.0;现在我希望将我的Proj1 v2.0的版本merge到Proj master上,但不希望保存v1.1...等等这些中间版本;那么我可以这样做:

    • 将更改提交到 Proj1 br1分支上;
    • 在Proj1 br1 v1.0的基础上创建一个分支new;
    • 将当前的更改add和commit作为Proj1 new v2.0;【这样行不通】
    • 可以将Proj1 new提起一个Request来merge到Proj master上;

    rebase

    rebase到某次commit,以后的更改会保留吗?——可以选择squash
    使用rebase缩短Git提交历史的线

    高级操作2.配置远程库的SSH v2

    注:

    用同一台电脑登录不同域名下的远程仓库

    git 配置多个SSH-Key - stefanzhlg的博客 - OSCHINA

    用同一台电脑登录同一域名下的远程仓库

    多台电脑登录同一域名的远程仓库

    拷贝原来的sshkey,可以在多台电脑上使用:同一个ssh key用在多台电脑上_澜临一-CSDN博客_二台电脑可以用一个ssh?

    附录:config文件

    # NAME1([NAME1@gitee.com](mailto:NAME1@gitee.com))
    Host [NAME1.gitee.com](http://NAME1.gitee.com/)
        HostName [gitee.com](http://gitee.com/)
        PreferredAuthentications publickey
        IdentityFile C:\Users\<username>\.ssh\id_rsa_gitee1
        User git
    Host [NAME2.gitee.com](http://NAME2.gitee.com/)
        HostName [gitee.com](http://gitee.com/)
        PreferredAuthentications publickey
        IdentityFile C:\Users\<username>\.ssh\id_rsa_gitee2
        User git
    

    .ssh目录

    id_rsa
    id_rsa.pub
    id_rsa_gitee1
    id_rsa_gitee1.pub
    id_rsa_gitee2
    id_rsa_gitee2.pub
    known_hosts
    

    Git头指针分离状态_start_mao的博客-CSDN博客_git 头指针分离

  • 相关阅读:
    c++ list_iterator demo
    模板元编程例子
    !a && !b 和 !(a || b) 的故事
    简明解释算法中的大O符号
    重构oceanbase的一个函数
    正则表达式识别汉字
    编写易于理解代码的六种方式
    Linux下的tar压缩解压缩命令详解
    2013 年 —— Facebook 在开源方面的工作介绍
    Kent Beck揭秘Facebook开发部署流程
  • 原文地址:https://www.cnblogs.com/owxc/p/14142119.html
Copyright © 2011-2022 走看看