zoukankan      html  css  js  c++  java
  • GIT 使用

     

    配置

    git config --global user.name "Your Name"
    git config --global user.email "email@example.com"

    生成非对称钥匙

    #创建SSH key(主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件):
    ssh-keygen -t rsa -C "youremail@example.com"
    
    #登陆GitHub,“Account settings”——“SSH Keys”
    #点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

    输出

    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in id_rsa.gitee.
    Your public key has been saved in id_rsa.gitee.pub.
    The key fingerprint is:
    SHA256:lmjU8A4k+r6liYJmENBPM/7Frx3XDg98VeWvIQ9dLyw xxxxx@xxxxx.com
    The key's randomart image is:
    +---[RSA 2048]----+
    | .  . o         o|
    |. ..+o +       ..|
    |. .+ oo.o       +|
    |.  .o. +o.   o .+|
    | .  ..o.S. .E.=.o|
    |.  . ...  o ==o+ |
    |o   . .  o o *o  |
    |oo . =  . .   o  |
    |o.. +            |
    +----[SHA256]-----+

    查看相关id_rsa.pub后缀的钥匙后,复制cat输出,填写到对应代码存储库服务的ssh设置中

    如果是新的工程项目

    mkdir learngit
    cd learngit
    git init

    如果是需要继续的项目

    git clone xxxxxxxxxxxx就行

    如果需要拉取指定分支,比如tag是dev_jk

    git clone -b dev_jk http://10.1.1.11/service/tmall-service.git

    如果不需要历史库,可以使用浅克隆,shallow clone

    由于clone的内容非常少,因此速度就大大提升了。查看git log也只有最后一次递交记录而已。

    # 浅克隆经常在一些大型仓库中很有用——不用花费大量时间去clone一个完整的仓库,仅仅checkout出来某个分支(如master)的最新N次递交:
    git clone --depth 1 https://github.com/openwrt/openwrt.git

    关联远程库

    git remote add origin git@github.com:******/#####.git

    添加至仓库(又名版本库)

    git add .
    git commit -m "wrote update feature comment" 
    git add在提交你修改的文件之前,你需要把它们添加到暂存区。如果该文件是新创建的,你可以执行将该文件添加到暂存区
    
    git add . //Git会递归地将你执行命令时所在的目录中的所有文件添加上去,所以如果你将当前的工作目录作为参数,它就会追踪那儿的所有文件
    git add -u //使用-u参数调用了git add命令,会将本地有改动(包括删除和修改)的已经追踪的文件标记到暂存区中。
    git add -A //使用-A参数会将添加所有改动的已跟踪文件和未跟踪文件。

    查看当前提交状态

    # 查看当前提交状态
    git status

    查看历史

    # 每个提交在一行内显示
    git log --oneline 或者 git log --pretty=oneline

    # 在所有提交日志中搜索包含「homepage」的提交
    git log --all --grep='homepage'

    # 获取某人的提交日志
    git log --author="Maxence"

    参考日志 git reflog

    git reflog <subcommand> <options>
    # Reference logs(参考日志),或者叫做"reflogs",记录了分支的tips(提示信息?)或者其他参考在本地仓库被更新的时间

    git log是显示当前的HEAD和它的祖先的,递归是沿着当前指针的父亲,父亲的父亲,…,这样的原则。

    git reflog根本不遍历HEAD的祖先。它是HEAD所指向的一个顺序的提交列表:它的undo历史。reflog并不是repo(仓库)的一部分,它单独存储,而且不包含在pushes,fetches或者clones里面,它纯属是本地的。

    添加推送

    git push -u origin master(第二次就不用-u了)
    
    推送到其他分支(并命名)
    git push origin dev

    查看远程库信息

    git remote
    #详细
    git remote -v

    查看当前所处tag

    git log --graph --pretty=format:'%h %d %s (%cr) <%an>' --abbrev-commit --date=relative
    
    git branch -vv

    git 删除远程分支文件

    git删除远程分支包括两种情况:
    (1)仅仅删除远程分支文件,不删除本地的文件;
    (2)删除远程分支文件的同时,删除本地的文件。

    1. 仅仅删除远程分支文件,不删除本地文件
    删除远程文件filename

    git rm --cached filename
    git commit -m "delete remote file filename "
    git push -u origin master(此处是当前分支的名字)

    删除远程文件夹directoryname

    git rm -r --cached directoryname
    git commit -m "delete remote directory directoryname "
    git push -u origin master(此处是当前分支的名字)

    2. 删除本地文件与远程分支文件
    删除文件filename

    git rm filename
    git commit -m "delete file filename "
    git push -u origin master(此处是当前分支的名字)

    删除文件夹directoryname

    git rm -r directoryname
    git commit -m "delete directory directoryname "
    git push -u origin master(此处是当前分支的名字)

    版本回滚

    #回滚上一个版本,
    git reset --hard HEAD^
    #利用commit的id 回滚
    git reset --hard 3628164

      #HEAD //表示当前版本

      #HEAD^ 和 git reset // 上一个版本

      #HEAD^^ //上上一个版本

      #HEAD~10 //前10个版本

     分支管理

    查看分支:git branch -a
    
    创建分支:git branch <name>

    删除本地分支 git branch -d <name>
    删除远程分支 git push origin --delete <name> 切换到其他分支:git checkout
    <name> 回到该分支最新状态 git checkout master 创建+切换分支:git checkout -b <name> 合并某分支到当前分支:git merge <name>

    本地仓库乱了,需要对齐到远程

    git fetch origin
    git checkout master
    git reset --hard origin/master

    查看我的分支和 master 的不同

    git diff master..my-branch

    修改上一次的提交

    # 编辑上次提交
    git commit --amend -m "更好的提交日志"
    .gitgnore 使git忽略掉目标文件

     同步代码

    最常见的命令如取回origin 主机的master 分支

    git fetch origin master
    或者
    git pull origin master
    # git pull <远程主机名> <远程分支名>:<本地分支名>

     同步代码最好加上--rebase

    git pull --rebase

    # git pull  = git fetch + git merge FETCH_HEAD
    git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。

    所以,默认情况下,git pull就是先fetch,然后执行merge 操作,如果加–rebase 参数,就是使用git rebase 代替git merge。

    merge 和 rebase

    merge 是合并的意思,rebase是复位基底的意思。

    现在我们有这样的两个分支,test和master,提交如下:

          D---E test
         /
    A---B---C---F master
    

    在master执行git merge test,然后会得到如下结果:

          D--------E
         /          
    A---B---C---F----G   test, master 得到的G节点是融合了E节点的新feature部分

    在master执行git rebase test,然后得到如下结果:

    A---B---D---E---C'---F'   test, master  
    可以看到,merge操作会生成一个新的节点,之前的提交分开显示。而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交,并且是以test分支,复位了基底。通过上面可以看到,想要更好的提交树,使用rebase操作会更好一点。这样可以线性的看到每一次提交,并且没有增加提交节点。
     
     

    解决冲突

    在我们操作过程中。merge 操作遇到冲突的时候,当前merge不能继续进行下去。手动修改冲突内容后,add 修改,commit 就可以了

    错误add

    git rm xx.file (这是相对add的反操作)

  • 相关阅读:
    Apache服务器的简单配置与安全策略
    Linux下的ICMP反弹后门:PRISM
    项目年度任务失败总结
    SpringBoot下配置Druid
    ftm国际化解决方案
    SpringBoot自动装配源码解析
    log4j到log4j2升级迁移方案
    Linux常用命令记录
    MySQL安装后无法用root用户访问的问题
    html实体命名
  • 原文地址:https://www.cnblogs.com/clemente/p/13288640.html
Copyright © 2011-2022 走看看