zoukankan      html  css  js  c++  java
  • 手把手教你学Git

    Git 使用手册独家实战

    0、查看本机公钥

    步骤:

    • 1、进入.ssh目录
      • cd ~/.ssh
    • 2、找到id_rsa.pub文件
      • ls / ll
    • 3、查看文件
      • cat id_rsa.pub
    JackFeng@JackFeng MINGW64 ~/Desktop
    $ cd ~/.ssh
    
    JackFeng@JackFeng MINGW64 ~/.ssh
    $ ls
    config  id_rsa  id_rsa.pub  id_rsa_sql  id_rsa_sql.pub  known_hosts
    
    JackFeng@JackFeng MINGW64 ~/.ssh
    $ cat id_rsa.pub
    

    1、配置多个git仓库

    多仓库之间 'ssh-key切换'
    
    #1、生成客户端自己的密钥对
    
    ssh-keygen ---- 一顿回车即可
    
    # 实际操作 换成你的邮箱即可
    ssh-keygen -t rsa -C "youremail@example.com"
    
    
    可以在客户端的家目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥。
    
    

    生成新的ssh-key

    #second@mail.com  工作邮箱地址
    ssh-keygen -t rsa -C 'second@mail.com' -f id_rsa_second
    

    配置多个仓库

    在.ssh目录创建config文本文件并完成相关配置(最核心的地方)

    每个账号单独配置一个Host,每个Host要取一个别名,每个Host主要配置HostNameIdentityFile两个属性即可

    Host的名字可以取为自己喜欢的名字,不过这个会影响git相关命令,例如:

    HostName        这个是真实的域名地址
    IdentityFile        这里是id_rsa的地址
    PreferredAuthentications 配置登录时用什么权限认证--可设为publickey,password publickey,keyboard-interactive等
    User           配置使用用户名

    config

    # 配置github.com
    Host github.com
        HostName github.com
        IdentityFile ~.sshid_rsa
        PreferredAuthentications publickey
        User yinjie.feng
    
    # 配置SQLSQ
    Host SQL
        HostName github.com
        IdentityFile ~.sshid_rsa_sql
        PreferredAuthentications publickey
        User yinjie.feng
    
    

    测试是否调通

    JackFeng@JackFeng MINGW64 ~/.ssh
    $ vim config
    
    JackFeng@JackFeng MINGW64 ~/.ssh
    $ ssh -T git@github.com
    Hi A2Data! You've successfully authenticated, but GitHub does not provide shell access.
    
    JackFeng@JackFeng MINGW64 ~/.ssh
    $ vim config
    
    JackFeng@JackFeng MINGW64 ~/.ssh
    $ ssh -T git@SQL
    Hi MineData-SQL! You've successfully authenticated, but GitHub does not provide shell access.
    
    
    

    git add、git commit、git remote add、git push

    需要说明的一点,在git commit 时需要一次身份验证,正确输入你的用户名和邮箱就可以了。

    另外注意:github根据配置文件的user.email来获取github帐号显示author信息,所以对于多帐号用户一定要记得将user.email改为相应的email(monster@mail.com)。

    总结一下:其实建立第二个密钥对的区别就在于对第二密钥对的声明,因此需要在.ssh目录下添加config文件,添加语句dentityFile ~/.ssh/id_rsa_sql声明这是第二个密钥对。这条连接命令就体现出来了。

    查看用户名

    git config user.name
    git config user.email
    

    修改用户名

    git config --global user.name "xxx"
    git config --global user.email "xxx"
    
    

    2、从远程项目拉取

    git clone 项目地址
    

    3、提交代码到远程仓库

    常规操作
    ##添加
    git add . .
    
    #查看状态
    git status
    
    # 提交
    git commit -m "代码描述"
    
    # 再次查看状态
    git status
    
    # 拉取最新代码
    git pull
    
    # 提交
    git push
    
    

    4、git分支操作

    Git初始化

    解决 fatal: Not a git repository (or any of the parent directories): .git 问题

    git init
    
    git clone  --- 克隆项目
    
    JackFeng@JackFeng MINGW64 /d/Practice
    $ git clone git@github.com:MineData-SQL/SQL.git
    Cloning into 'SQL'...
    remote: Enumerating objects: 3, done.
    remote: Counting objects: 100% (3/3), done.
    remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    Receiving objects: 100% (3/3), done.
    
    

    创建分支

    git branch <branch_name> #指定分支名称
    git checkout -b ["分支名"]
    

    查看分支

    git branch # 查看所有分支,* 号所属代表当前分支
    git branch # 查看分支详情,包括分支指向得commitid及提交信息
    
    

    切换分支

    git checkout <branch_name> #切换到指定分支
    git checkout -b <branch_name> #创建并切换到指定分支
    
    

    删除分支

    git branch -d <branch_name>
    .#删除一个干净的分支(即相对当前分支而言该分支没有新的提交记录)
    git branch -D <branch_name>
    .#强制删除一个分支,该分支有没有合并到当前分支的提交记录
    注意:删除分支前都需要先切换到其他分支才能进行删除操作
    

    分支恢复

    思路:对于已经有提交记录的分支删除后,实际上只是删除指针,commit记录还保留,如果想恢复,需要使用git reflog查找该分支指向的

    commitId,然后根据commitId创建新的分支

    HEAD@{1}

    git reflog
    
    git branch <branch_name> <hash_val> 
    #根据指定commit创建新分支
    

    分支改名

    git branch -m <branch_name> newname
    
    JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
    $ git branch -m master-one master-O
    
    JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
    $ git branch
      master
      master-O
    * master-two
    
    

    分支合并

    git merge #将指定分支合并到当前分支
    如果两个分支没有产生分叉情况,那么会进行快速合并,即fast-forward方式,它并不会产生新的commitId,只是改变了指针的指向,产生分叉合并可能会有冲突情况。

    示例:

    合并master-O分支到master分支,此时合并为fast-forward方式

    微信截图_20200330230413.png

    分支合并细节

    git merge -ff -m "msg" #合并分支时禁用Fast forward模式

    如果使用fast-forward方式进行分支合并,只是简单改变了分支指针,而不会产生新的commit记录。

    为了保证合并数据的完整性,我们也可以在合并时指定不使用fast-forward方式,使用 --ff 选项。这样,在merge时就会生成一个新的commit,从日志上就可以看到分支合并记录了。

    示例:我们在master-two分支上新增一次提交,然后合并到master分支上,git log查看最新一次的提交记录,显示的正是我们合并分支时的记录

    git log --pretty=oneline -1

    JackFeng@JackFeng MINGW64 /d/Practice/SQL (master)
    $ git checkout master-two
    Switched to branch 'master-two'
    
    JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
    $ echo " thank you for attention DataScience " >> a2data.txt
    
    JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
    $ git add a2data.txt
    warning: LF will be replaced by CRLF in a2data.txt.
    The file will have its original line endings in your working directory
    
    JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
    $ git commit -m " add file"
    [master-two 59a8816]  add file
     1 file changed, 1 insertion(+)
     create mode 100644 a2data.txt
    
    JackFeng@JackFeng MINGW64 /d/Practice/SQL (master-two)
    $ git checkout master
    Switched to branch 'master'
    Your branch is up to date with 'origin/master'.
    
    
    JackFeng@JackFeng MINGW64 /d/Practice/SQL (master)
    $ git merge --ff -m "meger master-two branch" master-two
    Updating ab83ffb..59a8816
    Fast-forward (no commit created; -m option ignored)
     a2data.txt | 1 +
     1 file changed, 1 insertion(+)
     create mode 100644 a2data.txt
    
    JackFeng@JackFeng MINGW64 /d/Practice/SQL (master)
    $ git log --pretty=oneline -1
    59a88161e630f0853b852946fddb6c7e787906fe (HEAD -> master, master-two)  add file
    
    

    冲突解决

    当对分叉分支进行合并时,如果两个分支都对同一文件进行了修改,那么合并时就有可能会产生冲突情况。

    如果两个分支对同一文件的修改是有规律的,比如对不同地方的修改,那么git工具可以实现自动合并.

    如果无法自动合并,则需要对冲突文件进行手动修改,修改完成后使用git add表示冲突已经解决,然后使用git commit进行提交

    示例:在master分支上对两个文件进行修改提交.

    a2data.txt和**DataScience*。

    然后切换到master-O分支上对两个文件进行修改提交.

    文件由于修改的是不同地方,所以自动合并。

    我们查看readme文件的内容,==上面和下面的内容分别代表了不同分支的修改内容,将冲突标记去掉,然后内容根据需求进行恰当的修改,然后进行一次提交即完成了冲突的解决。

    修改文件相同则会产生合并冲突

    (merge conflict)

    master

    master-O

    合并分支

    分支暂存

    git stash #将工作暂存
    git stash list #列出所有的暂存状态

    从暂存区之中进行恢复,有两种处理方式:
    1.先恢复,而后再删除暂存
    git stash apply
    git stash drop
    2.恢复的同时也将stash内容删除
    git stash pop

    当我们在分支上进行代码开发时,有可能会接到突发需求,而当前的代码尚未完成,所以还不能直接提交。

    为了解决这样的问题,git就提供了分支暂存的机制,可以将开发一半的分支进行保存,在适当的时候进行代码恢复。


    示例:master-two分支上新建文件,然后添加到暂存区表示尚未完成的任务,对当前分支进行暂存,git status显示工作空间是干净的。

  • 相关阅读:
    Kubernetes服务目录的设计
    浅谈移动边缘计算
    kubernetes源码分析 -- kube-proxy
    openstack dpdk
    KVM irqfd and ioeventfd
    dpdk CUSE
    《springboot实战》丁雪峰翻译 笔记
    photoshop
    office word使用
    baidu地图api使用
  • 原文地址:https://www.cnblogs.com/a2data/p/12597940.html
Copyright © 2011-2022 走看看