zoukankan      html  css  js  c++  java
  • git_基本使用

    1.默认你已经安装了,git的客户端,这里我们使用git bash操作。

    2.执行git init命令:      git ini

    3.在本地创建ssh key:  ssh-keygen -t rsa -C "wuyan@qql.com"

    4.不设置 任何秘密 回车下一步 生成key

    4.1设置username和email

      git config --global user.name "takhello0"
      git config --global user.email "wuyan@qq.com"

    5.进入提示的地址下查看ssh key文件

    6.查看key 

    7.登陆git 设置ssh keys

    8.测试是否可以成功链接: ssh -T git@github.com  如果出现 You’ve successfully authenticated, but GitHub does not provide shell access 成功连上github。

    9.在git上建立仓库   不要添加文件

    10.

    -git add  -A.               # 添加所有文件到本地索引,命令用法:git add <file>

    -git commit -m "My first commit operation"   # 提交修改到本地仓库,-m选项添加提交注释

    -git remote add origin git@github.com:yourName/gitHub的仓库地址.git    # 添加远程仓库地址,保存在origin变量中

    推送到远程共享库中 -git push origin master      # 按照前一条命令中origin给定的github地址推送到github仓库的master分支

               git push -u origin master

    Git fetch origin master  获取远程仓库  

    git pull           切换目录(新用户),获取最新的文件

    git status          查看git仓库中各文件的当前状态

     

    11.交互流程

    12.目录简单说明

      

    1. hooks:这个目录存放一些shell脚本,可以设置特定的git命令后触发相应的脚本;在搭建gitweb系统或其他git托管系统会经常用到hook script
    2. info:包含仓库的一些信息
    3. objects:所有的Git对象都会存放在这个目录中,对象的SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名
    4. refs:这个目录一般包括三个子文件夹,heads、remotes和tags,heads中的文件标识了项目中的各个分支指向的当前commit
    5. config:这个是GIt仓库的配置文件
    6. description:仓库的描述信息,主要给gitweb等git托管系统使用
    7. HEAD:这个文件包含了一个档期分支(branch)的引用,通过这个文件Git可以得到下一次commit的parent

    13.代码clone

      git clone <仓库地址或目录> /d/software/respository/<仓库名> <用户目录>

      注意的是第一次需要使用clone命令将整个项目down到本地(类似svn的check),不是首次的话就可以直接使用git pull来同步更新代码了

    1.在本地仓库里右键 Git Init Here
    2.git init
    3.在本地创建ssh key
    ssh-keygen -t rsa -C "wuyan@qq.com"

    4.设置username和email
    git config --global user.name "takhello0"
    git config --global user.email "wuyan@qq.com"

    4.0  git remote add origin git@github.com:yourName/gitHub的仓库地址.git 

    4.1在gitHub上建立仓库 不要添加文件

    5.

    git add 文件名

    git add -A

    6.git commit -m "备注"

    7.git remote add origin 你提交的地址

    8.git push -u origin master

     获取远程仓库 

    Git fetch origin master

     

    补充收集 一:git提交忽略文件或文件夹

    在项目根目录下面 添加 .gitignore文件

    文件中每一行表示需要忽略的文件的正则表达式.

     

    .gitignore文件过滤有两种模式,开放模式和保守模式

    1. 开放模式负责设置过滤哪些文件和文件夹

    例如: /target/ 表示项目根目录下的target文件夹里面所有的内容都会被过滤,不被GIT 跟踪

    .classpath 表示项目根目录下的.classpath文件会被过滤,不被GIT跟踪

     

    2. 保守模式负责设置哪些文件不被过滤,也就是哪些文件要被跟踪。

    例如:

    !/target/*.h 表示target文件夹目录下所有的.h文件将被跟踪

    另外别忘记了在.gitignore文件中加入一行.gitignore,否则的话.gitignore将会被传到GIT服务器上

    规则写法

    1. 在已忽略文件夹中不忽略指定文件夹

     

    /node_modules/*

    !/node_modules/layer/

    2. 在已忽略文件夹中不忽略指定文件

    /node_modules/*

    !/node_modules/layer/layer.js

     

    【注意项】注意写法 要忽略的文件夹一定要结尾 /* ,否则不忽略规则将无法生效

    3. 其他规则写法 (附)

      以斜杠“/”开头表示目录;
      以星号“*”通配多个字符;
      以问号“?”通配单个字符
      以方括号“[]”包含单个字符的匹配列表;
      以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

    1、忽略文件

    *.bak               # 忽略所有扩展名为.bak的文件

    !keep.bak      # 但keep.bak文件除外(不会被忽略)

    temp/test.txt  # 忽略temp目录下的test.txt文件

    temp/*.txt       # 忽略temp目录下所有扩展名为.txt的文件

     

    2、忽略目录

    temp/       # 忽略temp目录下的所有目录和文件

    temp/*/    # 忽略temp目录下的所有目录,但不会忽略该目录下的文件

     

    补充收集 二: 错误处理

     

    如果输入$ git remote add origin git@github.com:djqiang(github帐号名)/gitdemo(项目名).git 

        提示出错信息:fatal: remote origin already exists.

        解决办法如下:

        1、先输入$ git remote rm origin

        2、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git 就不会报错了!

        3、如果输入$ git remote rm origin 还是报错的话,error: Could not remove config section 'remote.origin'. 我们需要修改gitconfig文件的内容

        4、找到你的github的安装路径,我的是C:UsersASUSAppDataLocalGitHubPortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8etc

        5、找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那一行删掉就好了!

        如果输入$ ssh -T git@github.com
        出现错误提示:Permission denied (publickey).因为新生成的key不能加入ssh就会导致连接不上github。

        解决办法如下:

        1、先输入$ ssh-agent,再输入$ ssh-add ~/.ssh/id_key,这样就可以了。

        2、如果还是不行的话,输入ssh-add ~/.ssh/id_key 命令后出现报错Could not open a connection to your authentication agent.解决方法是key用Git Gui的ssh工具生成,这样生成的时候key就直接保存在ssh中了,不需要再ssh-add命令加入了,其它的user,token等配置都用命令行来做。

        3、最好检查一下在你复制id_rsa.pub文件的内容时有没有产生多余的空格或空行,有些编辑器会帮你添加这些的。

        如果输入$ git push origin master

        提示出错信息:error:failed to push som refs to .......

        解决办法如下:

        1、先输入$ git pull origin master //先把远程服务器github上面的文件拉下来

        2、再输入$ git push origin master

        3、如果出现报错 fatal: Couldn't find remote ref master或者fatal: 'origin' does not appear to be a git repository以及fatal: Could not read from remote repository.

        4、则需要重新输入$ git remote add origingit@github.com:djqiang/gitdemo.git

        使用git在本地创建一个项目的过程

        $ makdir ~/hello-world    //创建一个项目hello-world
        $ cd ~/hello-world       //打开这个项目
        $ git init             //初始化 
        $ touch README
        $ git add README        //更新README文件
        $ git commit -m 'first commit'     //提交更新,并注释信息“first commit”
        $ git remote add origin git@github.com:defnngj/hello-world.git     //连接远程github项目  
        $ git push -u origin master     //将本地项目更新到github项目上去

       

        gitconfig配置文件

             Git有一个工具被称为git config,它允许你获得和设置配置变量;这些变量可以控制Git的外观和操作的各个方面。这些变量可以被存储在三个不同的位置: 
             1./etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’--system’ 给 git config,它将明确的读和写这个文件。 
             2.~/.gitconfig 文件 :具体到你的用户。你可以通过传递--global 选项使Git 读或写这个特定的文件。
             3.位于git目录的config文件 (也就是 .git/config) :无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在.git/config中的值覆盖了在/etc/gitconfig中的同一个值。
            在Windows系统中,Git在$HOME目录中查找.gitconfig文件(对大多数人来说,位于C:Documents and Settings$USER下)。它也会查找/etc/gitconfig,尽管它是相对于Msys 根目录的。这可能是你在Windows中运行安装程序时决定安装Git的任何地方。

            配置相关信息:

            2.1 当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

      $ git config --global user.name "John Doe"

      $ git config --global user.email johndoe@example.com

     

           2.2    你的编辑器(Your Editor)

      现在,你的标识已经设置,你可以配置你的缺省文本编辑器,Git在需要你输入一些消息时会使用该文本编辑器。缺省情况下,Git使用你的系统的缺省编辑器,这通常可能是vi 或者 vim。如果你想使用一个不同的文本编辑器,例如Emacs,你可以做如下操作:

      $ git config --global core.editor emacs

     

          2.3 检查你的设置(Checking Your Settings)

      如果你想检查你的设置,你可以使用 git config --list 命令来列出Git可以在该处找到的所有的设置:

      $ git config --list

          你也可以查看Git认为的一个特定的关键字目前的值,使用如下命令 git config {key}:

      $ git config user.name

     

          2.4 获取帮助(Getting help)

      如果当你在使用Git时需要帮助,有三种方法可以获得任何git命令的手册页(manpage)帮助信息:

      $ git help <verb>

      $ git <verb> --help

      $ man git-<verb>

      例如,你可以运行如下命令获取对config命令的手册页帮助:

      $ git help config

    Git命令

     

    服务器端(remote)的情况:

     

    git的服务器端(remote)端包含多个repository,每个repository可以理解为一个项目。而每个repository下有多个branch,此处各个branch的意义,可以参考这篇文章。"origin"就是指向某一个repository的指针。服务器端的"master"(强调服务器端是因为本地端也有master)就是指向某个repository的一个branch的指针。

    这是服务器端(remote)的情况:

    本地电脑(local)上:"master"就是指向刚刚从remote server传到本地的副本branch。

     

    查看、添加、提交、删除、找回,重置修改文件

    1.新建代码库

    # 在当前目录新建一个Git代码库
    $ git init
    
    # 新建一个目录,将其初始化为Git代码库
    $ git init [project-name]
    
    # 下载一个项目和它的整个代码历史
    $ git clone [url]

    2.配置

    Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

    # 显示当前的Git配置
    $ git config --list
    
    # 编辑Git配置文件
    $ git config -e [--global]
    
    # 设置提交代码时的用户信息
    $ git config [--global] user.name "[name]"
    $ git config [--global] user.email "[email address]"

    3.增删文件

    # 添加指定文件到暂存区
    $ git add [file1] [file2] ...
    
    # 添加指定目录到暂存区,包括子目录
    $ git add [dir]
    
    # 添加当前目录的所有文件到暂存区
    $ git add .
    
    # 添加每个变化前,都会要求确认
    # 对于同一个文件的多处变化,可以实现分次提交
    $ git add -p
    
    # 删除工作区文件,并且将这次删除放入暂存区
    $ git rm [file1] [file2] ...
    
    # 停止追踪指定文件,但该文件会保留在工作区
    $ git rm --cached [file]
    
    # 改名文件,并且将这个改名放入暂存区
    $ git mv [file-original] [file-renamed]

    4.提交文件

    # 提交暂存区到仓库区
    $ git commit -m [message]
    
    # 提交暂存区的指定文件到仓库区
    $ git commit [file1] [file2] ... -m [message]
    
    # 提交工作区自上次commit之后的变化,直接到仓库区
    $ git commit -a
    
    # 提交时显示所有diff信息
    $ git commit -v
    
    # 使用一次新的commit,替代上一次提交
    # 如果代码没有任何新变化,则用来改写上一次commit的提交信息
    $ git commit --amend -m [message]
    
    # 重做上一次commit,并包括指定文件的新变化
    $ git commit --amend [file1] [file2] ...

    9.撤销操作

    # 恢复暂存区的指定文件到工作区
    $ git checkout [file]
    
    # 恢复某个commit的指定文件到暂存区和工作区
    $ git checkout [commit] [file]
    
    # 恢复暂存区的所有文件到工作区
    $ git checkout .
    
    # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
    $ git reset [file]
    
    # 重置暂存区与工作区,与上一次commit保持一致
    $ git reset --hard
    
    # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
    $ git reset [commit]
    
    # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
    $ git reset --hard [commit]
    
    # 重置当前HEAD为指定commit,但保持暂存区和工作区不变
    $ git reset --keep [commit]
    
    # 新建一个commit,用来撤销指定commit
    # 后者的所有变化都将被前者抵消,并且应用到当前分支
    $ git revert [commit]
    
    # 暂时将未提交的变化移除,稍后再移入
    $ git stash
    $ git stash pop

    5.分支处理

    # 列出所有本地分支
    $ git branch
    
    # 列出所有远程分支
    $ git branch -r
    
    # 列出所有本地分支和远程分支
    $ git branch -a
    
    # 新建一个分支,但依然停留在当前分支
    $ git branch [branch-name]
    
    # 新建一个分支,并切换到该分支
    $ git checkout -b [branch]
    
    # 新建一个分支,指向指定commit
    $ git branch [branch] [commit]
    
    # 新建一个分支,与指定的远程分支建立追踪关系
    $ git branch --track [branch] [remote-branch]
    
    # 切换到指定分支,并更新工作区
    $ git checkout [branch-name]
    
    # 切换到上一个分支
    $ git checkout -
    
    # 建立追踪关系,在现有分支与指定的远程分支之间
    $ git branch --set-upstream [branch] [remote-branch]
    
    # 合并指定分支到当前分支
    $ git merge [branch]
    
    # 选择一个commit,合并进当前分支
    $ git cherry-pick [commit]
    
    # 删除分支
    $ git branch -d [branch-name]
    
    # 删除远程分支
    $ git push origin --delete [branch-name]
    $ git branch -dr [remote/branch]

     6.标签

    # 列出所有tag
    $ git tag
    
    # 新建一个tag在当前commit
    $ git tag [tag]
    
    # 新建一个tag在指定commit
    $ git tag [tag] [commit]
    
    # 删除本地tag
    $ git tag -d [tag]
    
    # 删除远程tag
    $ git push origin :refs/tags/[tagName]
    
    # 查看tag信息
    $ git show [tag]
    
    # 提交指定tag
    $ git push [remote] [tag]
    
    # 提交所有tag
    $ git push [remote] --tags
    
    # 新建一个分支,指向某个tag
    $ git checkout -b [branch] [tag]

    7.查看信息

    # 显示有变更的文件
    $ git status
    
    # 显示当前分支的版本历史
    $ git log
    
    # 显示commit历史,以及每次commit发生变更的文件
    $ git log --stat
    
    # 搜索提交历史,根据关键词
    $ git log -S [keyword]
    
    # 显示某个commit之后的所有变动,每个commit占据一行
    $ git log [tag] HEAD --pretty=format:%s
    
    # 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
    $ git log [tag] HEAD --grep feature
    
    # 显示某个文件的版本历史,包括文件改名
    $ git log --follow [file]
    $ git whatchanged [file]
    
    # 显示指定文件相关的每一次diff
    $ git log -p [file]
    
    # 显示过去5次提交
    $ git log -5 --pretty --oneline
    
    # 显示所有提交过的用户,按提交次数排序
    $ git shortlog -sn
    
    # 显示指定文件是什么人在什么时间修改过
    $ git blame [file]
    
    # 显示暂存区和工作区的代码差异
    $ git diff
    
    # 显示暂存区和上一个commit的差异
    $ git diff --cached [file]
    
    # 显示工作区与当前分支最新commit之间的差异
    $ git diff HEAD
    
    # 显示两次提交之间的差异
    $ git diff [first-branch]...[second-branch]
    
    # 显示今天你写了多少行代码
    $ git diff --shortstat "@{0 day ago}"
    
    # 显示某次提交的元数据和内容变化
    $ git show [commit]
    
    # 显示某次提交发生变化的文件
    $ git show --name-only [commit]
    
    # 显示某次提交时,某个文件的内容
    $ git show [commit]:[filename]
    
    # 显示当前分支的最近几次提交
    $ git reflog

    # 从本地master拉取代码更新当前分支:branch 一般为master
    $ git rebase [branch]

    8.远程同步

    # 下载远程仓库的所有变动
    $ git fetch [remote]
    
    # 显示所有远程仓库
    $ git remote -v
    
    # 显示某个远程仓库的信息
    $ git remote show [remote]
    
    # 增加一个新的远程仓库,并命名
    $ git remote add [shortname] [url]
    
    # 取回远程仓库的变化,并与本地分支合并
    $ git pull [remote] [branch]
    
    # 上传本地指定分支到远程仓库
    $ git push [remote] [branch]
    
    # 强行推送当前分支到远程仓库,即使有冲突
    $ git push [remote] --force
    
    # 推送所有分支到远程仓库
    $ git push [remote] --all

    10.其他

    # 生成一个可供发布的压缩包
    $ git archive

    11.分支对比

      git log dev ^master   查看 dev 有,而 master 中没有的

      git log master ^dev   master 中有,而 dev 中没有的内容


    异常记录:

    1.问题1 add时出现警告

    解决方案

    git config --global core.autocrlf false

    原因:

    原因是路径中存在 / 的符号转义问题,false就是不转换符号默认是true,相当于把路径的 / 符号进行转义,这样添加的时候就有问题

     2.错误2

    2、npm run -s precommit (node v8.9.3)

    huideMacBook-Pro:graph huiyu$ git commit -m “更新代码” 


    husky > npm run -s precommit (node v8.9.3)

    fatal: Not a git repository: ‘.git’

    husky > pre-commit hook failed (add –no-verify to bypass)

    解决: 
    git commit -m “更新代码” -n

    181115 新增

    需求:在本地建立分支

    1.git init 初始化

    2.git add. 暂存

    3.git commit -m 'first' 提交

    4.git branch testVersions 新建分支 ‘testVersions’

    5.git branch -a 查看所有分支

    6.git checkout testVersions 切换到分支‘testVersions’

    7.git checkout -b dev1 新建分支dev1 并切换到dev1

    需求:对未修改完成的分支进行保存

      1.git stash   /   git stash save “修改的信息"    可以隐藏调未完成的修改

      2.git stash list   查看未修改完成的保存

      3. git stash apply     /     git stash apply stash@{0}  取出未修改完的保存

               git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
               git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
               git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
               git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

      补充:

                   切回原来分支 使用 git cherry-pick [commit id] 的方式,将另一分支的提交转到当前分支提交。 

        

    需求:控制版本

    1. 建立多个分支

    feature分支 (开发使用)

    release分支 (测试中出现的bug修改)

    hotfixes分支 (master中出现的bug修改)

    盗图(~~)

    指南:https://git-scm.com/book/zh/v1/

    https://www.tongbiao.xyz/
  • 相关阅读:
    概率密度函数 通俗理解
    宋浩《概率论与数理统计》笔记---2.2.2、连续型随机变量及其概率密度函数
    宋浩《概率论与数理统计》笔记---2.2.1、离散型随机变量及其概率分布
    宋浩《概率论与数理统计》笔记---2.1、随机变量的概念
    宋浩《概率论与数理统计》笔记---1.5.2、伯努利模型
    宋浩《概率论与数理统计》笔记---1.5.1、事件的独立性
    贝叶斯公式-汽车实例
    贝叶斯公式的理解
    宋浩《概率论与数理统计》笔记---1.4.2、贝叶斯公式
    nodemon通过配置文件监视
  • 原文地址:https://www.cnblogs.com/tongbiao/p/7764309.html
Copyright © 2011-2022 走看看