• git 基本使用


    • Workspace:工作区
    • Index / Stage:暂存区
    • Repository:仓库区(或本地仓库)
    • Remote:远程仓库

    -----------------------------------------------------------------------------------------------------------------------------------------------------------

    本地操作

    github 创建本地仓库

    添加一个文件,文件名叫:README.md 命令:touch README.md

    使用当前目录作为Git仓库,我们只需使它初始化。

    git init //初始化本地仓库

    本地仓库关联远程仓库

    git remote add origin 远程仓库地址

    Git如何切换远程仓库地址,有三种办法:
    一、修改命令

    git remote set-url origin url

    二、先删后加

    git remote rm origin
    git remote add origin git@github.com:sheng/demo.git

    三、修改config文件

    如果你的项目有加入版本控制,那可以到项目根目录下,查看隐藏文件夹, 发现.git文件夹,找到其中的config文件,就可以修改其中的git remote origin地址了。

    git删除远程仓库的文件或目录

    git rm -r --cached a/2.txt //删除a目录下的2.txt文件   删除a目录git rm -r --cached a

    git commit -m "删除a目录下的2.txt文件" 

    git push

    note:  用-r参数删除目录, git rm --cached a.txt 删除的是本地仓库中的文件,且本地工作区的文件会保留且不再与远程仓库发生跟踪关系,如果本地仓库中的文件也要删除则用git rm a.txt

    SSH key 生成步骤

    ssh-keygen -t rsa -C 注册是的邮箱

    密钥类型可以用 -t  选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。这里使用的是rsa。

    同时在密钥中有一个注释字段,用-C来指定所指定的注释,可以方便用户标识这个密钥,指出密钥的用途或其他有用的信息。所以在这里输入自己的邮箱或者其他都行。

    也可以添加 -f  filename 指定密钥文件名,生成 filename__rsa 和 filename_rsa.pub 2个文件,没有 -f 参数默认生成 id_rsa 和 id_rsa.pub 2个文件。

    基本使用参数

    • -t 用来指定密钥类型(dsa | ecdsa | ed25519 | rsa | rsa1);

    • -P 用来指定密语

    • -f 用来指定生成的密钥文件名

    • -C 用来添加注释

          

    输入完毕后程序同时要求输入一个密语字符串(passphrase),空表示没有密语。接着会让输入2次口令(password),空表示没有口令。3次回车即可完成当前步骤,此时[c盘>用户>自己的用户名>.ssh]目录下已经生成好了。

     添加到远程:登录github,打开setting->Deploy keys,点击右上角 Add deploy key,把生成好的公钥id_rsa.pub放进 key输入框中,再为当前的key起一个title来区分每个key

    测试 添加 验证: ssh -T git@github.com

    相关配置说明: ssh-keygen参数说明

       git生成ssh key及本地解决多个ssh key的问题

       创建SSH密钥,并连接GitHub

     

    本地配置:将SSH私钥添加到 ssh-agent

    ssh-agent是管理多个ssh key的代理,受管理的私钥通过ssh-add来添加。

    假如我们手头有三台server:host1、host2、host3且每台server上到保存了本机(supersun.biz)的公钥,因此我可以通过公钥认证登录到每台主机;

    但是这三台server之间并没有并没有保存彼此的公钥,而且我也不可能将自己的私钥存放到server上(不安全),因此彼此之间没有公钥进行认证(可以密码认证,但是这样慢,经常输密码,烦且密码太多容易忘)。但是如果我们启用ssh-agent,问题就可以迎刃而解了。

    在后台启动 ssh-agent :$eval `ssh-agent -s` 注意这里是反引号

    将SSH私钥添加到 ssh-agent :ssh-add 

    编缉/etc/ssh/ssh_config文件:ForwardAgent yes

    让ssh-agent能转发,这样就可以这样登陆了:supersun.biz---->host1---->host2,到此请注意,如果host1上没有设定转发的话就登不了host3了,设定了转发后可以进一步跳到rs3上了。

    如运行ssh-add,遇到“Could not open a connection to your authentication agent.”。

    解决:需要ssh-agent启动bash,或者说把bash挂到ssh-agent下面。

    ssh-agent bash --login -i
    ssh-add

     

    远程操作

    查看远程仓库地址

    git remote -v
    查看指定远程仓库地址

    git remote warehouse_name
    添加新的仓库地址

    git remote add origin https://github.com/xue-y/email.git
    如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。

    git push -u origin master

    添加远程github仓库的时候提示错误:fatal: remote origin already exists.

    最后找到解决办法如下: # 原因是你已经在远程创建了仓库
    1、先删除远程 Git 仓库

      git remote rm origin

    2、再添加远程 Git 仓库

      git remote add origin git@github.com:FBing/java-code-generator

    查看操作记录

    git log -p “file name”
    跟踪查看某个文件的历史修改记录

    git log -3 --graph --stat
    查看历史修改的关系

    git log --stat

    git blame filename
    查看文件的每一句是谁的修改

     

    Git fetch和git pull的区别

    1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge

    Git fetch origin master
    git merge origin/master

    以上命令的含义:
    首先从远程的origin的master主分支下载最新的版本到origin/master分支上
    然后比较本地的master分支和origin/master分支的差别
    最后进行合并
    上述过程其实可以用以下更清晰的方式来进行:
    git fetch origin master:test
    git diff tmp
    git merge tmp
    从远程获取最新的版本到本地的test分支上,默认当前分支,之后再进行比较合并

    2. git pull:相当于是从远程获取最新版本并merge到本地

    git pull origin master

    上述命令其实相当于git fetch 和 git merge
    在实际使用中,git fetch更安全一些
    因为在merge前,我们可以查看更新情况,然后再决定是否合并

    如果git远程修改某个文件,使用上述命令本地无法更新

    git fetch --all //只是下载代码到本地,不进行合并操作
    Git fetch 仓库名 分支名:本地分支名

    git reset --hard origin/需要更新的本地分支名 //把HEAD指向最新下载的版本

    如果合并时(git pull | git merge)

    warning: LF will be replaced by CRLF in ……
    解决方法:
    git config --global core.autocrlf false
    就可以解决了。
    原因就是:
    原因是路径中存在 / 的符号转义问题,false就是不转换符号默认是true,相当于把路径的 / 符号进行转义,这样添加的时候就有问题

    创建分支时fatal: Not a valid object name: 'master'.

    原因:本地还没有创建master
    解决方案:添加一个文件提交即可

    处理 :untracked files

    1. # 删除 untracked files

    git rm -r --cache 文件名 
    #撤销添加到暂存区里的文件

    git rm -f 文件名 #删除暂存区和工作区的文件

    git clean -f  #删除文件

    # 连 untracked 的目录也一起删掉
    git clean -fd

    # 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
    git clean -xfd

    # 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
    git clean -nxfd
    git clean -nf
    git clean -nfd

    2 .#版本回退

    git reset --hard HEAD # 回退上一个版本
    git reset --hard 3628164 # 回退到指定版本 使用 git log 查看版本库

     3. #添加 git 忽略文件

    在仓库目录下新建一个名为.gitignore的文件

  • 相关阅读:
    数据结构基础
    基于TCP的通信 客户端
    hduacm 5255
    uva 10668
    hduacm 5104
    uva 10491
    Hibernate之性能优化
    Hibernate基础知识
    Hibernate入门
    Struts2之Crud综合实例
  • 原文地址:https://www.cnblogs.com/xuey/p/7447835.html
Copyright © 2020-2023  润新知