zoukankan      html  css  js  c++  java
  • Git知识点整合

    Git安装

    Windows上安装Git
    64 位安装包下载地址 : https://github.com/git-for-windows/git/releases/download/v2.16.2.windows.1/Git-2.16.2-64-bit.exe

    步骤6 选择第二项
    Use Git from the Windows Command Prompt

    步骤7 选择第二项
    Use the native Windows Secure Channel library

    步骤8 选择第一项
    Checkout Window-style,commit Unix-style line endings

    步骤9 选择第二项
    Use Windows' default console window

    在对应路径右键调用Git Bash here

    安装完git后设置:
    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"

    (此用户名和邮箱是git提交代码时用来显示你身份和联系方式的,并不是github用户名和邮箱)

    查看用户名和邮箱地址
    $ git config user.name
    $ git config user.email

    切换目录,目录最好英文
    cd /f/unfishied/git

    创建一个空目录
    $ mkdir learngit
    $ cd learngit
    $ pwd
    把这个目录变成Git可以管理的仓库
    $ git init
    在learngit目录或子目录下创建文件
    **把本地的修改提交到stage **
    git add [file1] [file2] ... # 添加指定文件到暂存区
    git add [dir] # 添加指定目录到暂存区,包括子目录
    git add . # 添加当前目录的所有文件到暂存区

    git rm [file1] [file2] ... # 删除工作区文件,并且将这次删除放入暂存区
    git rm --cached [file] # 停止追踪指定文件,但该文件会保留在工作区

    报错信息:
    warning: LF will be replaced by CRLF in ......
    The file will have its original line endings in your working directory. 解决方法:
    git config --global core.autocrlf false
    原因是路径中存在 / 的符号转义问题,false就是不转换符号默认是true,相当于把路径的 / 符号进行转义,这样添加的时候就有问题

    第二步,用命令git commit告诉Git,把文件提交到仓库:
    $ git commit -m "wrote a readme file"
    解析:-m 后面输入的是本次提交的说明,

    查看查看当前分支有哪些修改
    $ git status
    查看文件具体的修改内容
    $git diff readme.txt
    查看当前分支上面的日志信息 --pretty=oneline单行显示
    git log --pretty=oneline
    查看某个文件的每一行的修改记录()谁在什么时候修改的)
    git blame someFile
    撤销本地修改
    $ git reset --hard HEAD
    查看文件内容
    $ cat readme.txt
    回到未来某个版本 commit id bf2a (版本号写前几位就可以)
    $ git reset --hard bf2a
    记录你的每一次命令
    git reflog

    撤销修改
    一种是readme.txt修改后还没add,只在工作区
    一种是add后被添加到暂存区
    回到工作区
    git reset HEAD
    git resetgi命令既可以回退版本,也可以把暂存区的修改回退到工作区
    git status 查看
    to unstage 在暂缓区
    working directory 在工作区
    丢弃工作区
    git checkout --readme.txt

    删除文件
    在资源管理器中 删除文件后你有两个选择
    使用git rm删除,并且git commit;
    另一种情况是删错了, 因为版本库里还有
    $ git checkout --test.txt
    git checkout其实是用版本库你的版本替换工作区的版本,
    无论工作区是修改还是删除,都可以"一键还原"

    git stash //把未完成的修改缓存到栈容器中
    git stash list //查看所有的缓存
    git stash pop //恢复本地分支到缓存状态
    
    发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交。这时就可以考虑git stash。
    
    使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply将以前一半的工作应用回来。
    
    经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。
    

    远程仓库
    C:UsersAdministrator.ssh
    1.创建SSH Key,在用户主目录下,看看有没有.SSH目录,再看看目录下有没有
    id_rsa(私钥)和id_rsa.pub(公钥)这两个文件

     公钥与私钥使用场景:
     (1)私钥用来进行解密和签名,是给自己用的。
     (2)公钥由本人公开,用于加密和验证签名,是给别人用的。
    (3)当该用户发送文件时,用私钥签名,别人用他给的公钥验证签名,可以保证该信息是由他发送的。当该用户接受文件时,别人用他的公钥加密,他用私钥解密,可以保证该信息只能由他接收到。

    如果没有
    添加ssh key
    $ ssh-keygen -t rsa -C "yh-2@qq.com"

    Account settings-Add SSH Key
    在Key 文本框里粘贴id_rsa.pub文件的内容

    在GitHub上创建一个远程仓库
    Create a new repo
    Repository name填入learngit
    关联远程库
    git remote add origin git@github.com:Carroll9527/learngit.git
    Carroll9527替换成自己的Git用户名
    远程库的名字就是origin,这是Git默认的叫法
    Git name只是展示名, username才是用户名

    推送
    git push -u origin master
    -u参数,git不但会把本地的master分支内容推送新的远程分支,还会把本地
    master分支和远程master关联起来,指定orign为默认主机,后面就可以不加
    任何参数, 使用git push了

    远程分支上存在本地分支中不存在的提交,往往是多人协作开发过程中遇到的问题,可以先fetch再merge,也就是pull,把远程分支上的提交合并到本地分支之后再push。
    如果你确定远程分支上那些提交都不需要了,那么直接git push origin master -f,强行让本地分支覆盖远程分支。
    强行覆盖
    git push origin master -f

    推送其他分支
    git push origin dev

    master分支是主分支,因此要时刻与远程同步;
    
    dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
    
    bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
    
    feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
    

    //从远程仓库克隆
    $ git clone git@github.com:carroll/gitskills.git

    创建合并分支

    查看分支:git branch

    创建分支:git branch

    切换分支:git checkout

    创建+切换分支:git checkout -b

    合并某分支到当前分支:git merge

    删除分支:git branch -d

    解决冲突
    创建不同分支然后提交
    合并分支
    git merge feature1
    状态
    git status
    查看readme.txt的内容
    <<<,===,标记出不同分支的内容
    查看合并的日志情况
    git log --graph --pretty=oneline --abbrev-commit
    --abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
    普通方式合并
    git merge --no-ff -m "merge with no-ff" dev
    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

    工程进行到一半,没办法提交
    git stash 把现工作区存储起来
    查看工作现场
    git stash list
    恢复同时把stash内容删除
    git stash pop
    如果要丢弃一个没有被合并过的分支,
    可以通过git branch -D 强行删除。

    查看远程仓库的信息
    git remote -v
    推送分支
    git push origin dev
    master分支是主分支,因此要时刻与远程同步;
    dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
    bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
    feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

    同步冲突
    先指定本地dev分支与远程origin/dev分支的链接
    git branch --set-upstream-to=origin/dev dev

    多人协作的工作模式通常是这样:

    首先,可以试图用git push origin <branch-name>推送自己的修改;
    
    如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    
    如果合并有冲突,则解决冲突,并在本地提交;
    
    没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
    

    如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/

    git diff HEAD 比较的是工作区中的文件与版本库中文件的差异

    Rebase
    rebase操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。
    git rebase

    git diff
    (1)当暂存区中没有文件时,git diff比较的是,工作区中的文件与上次提交到版本库中的文件。
    (2)当暂存区中有文件时,git diff则比较的是,当前工作区中的文件与暂存区中的文件
    git diff HEAD -- file,比较的是工作区中的文件与版本库中文件的差异
    git diff --cached 查看已经add但是没有commit的内容

    git fetch 和git pull 的差别

    1、git fetch 相当于是从远程获取最新到本地,不会自动merge,如下指令:
     git fetch orgin master //将远程仓库的master分支下载到本地当前branch中
     git log -p master ..origin/master 比较本地的master分支和origin/master分支的差别
    git merge origin/master //进行合并
    也可以用以下指令:
    git fetch origin master:tmp //从远程仓库master分支获取最新,在本地建立tmp分支
    git diff tmp //將當前分支和tmp進行對比
    git merge tmp //合并tmp分支到当前分支

    1. git pull:相当于是从远程获取最新版本并merge到本地
      git pull origin master
      git pull 相当于从远程获取最新版本并merge到本地
      在实际使用中,git fetch更安全一些

    创建标签
    切换到需要打标签的分支上
    git branch
    git checkout master
    敲命令 git tag
    git tag v1.0
    查看所有标签
    git tag
    忘了打标签怎么办
    方法是找到历史提交的commit id
    git log --pretty=oneline --abbrev-commit
    $ git tag v0.9 f52c633

    查看标签信息
    git show v0.9
    如果打错标签,可以删除
    git tag -d v0.1
    推送标签到远程
    git push origin v.0
    一次性推送全部尚未推送到远程的本地标签:
    git push origin --tags
    删除远程标签比较麻烦
    先从本地删除
    git tag -d v0.9
    然后从远程删除
    git push origin :refs/tags/v0.9

    //使用GitHub
    访问开源项目主页
    点击Fork 就在自己的账号下克隆了一个bootstrap仓库
    然后从自己的账号下克隆
    git clone git@github.com:michaelliao/bootstrap.git

  • 相关阅读:
    VMWare安装Win10虚拟机 昆明
    c#游戏进程杀手 昆明
    图解机器学习读书笔记CH2
    深度学习中的线性代数知识详解
    图解机器学习读书笔记CH1
    三分算法
    POJ 2356 Find a multiple【抽屉原理】
    POJ 1170 Shoping Offers(IOI 95)
    HDU 2438 Turn the corner【三分】
    HDU 3552 I can do it! 【贪心】
  • 原文地址:https://www.cnblogs.com/Remedy/p/10340803.html
Copyright © 2011-2022 走看看