zoukankan      html  css  js  c++  java
  • Usage of git

    Reference
    远程分支切换问题

    Git 配置

    Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。

    这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

    • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
    • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
    • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

    用户信息

    配置个人的用户名称和电子邮件地址:

    $ git config --global user.name "runoob"
    $ git config --global user.email test@runoob.com
    

    创建一个 SSH key

    $ ssh-keygen -t rsa -C "your_email@example.com"
    代码参数含义:

    -t 指定密钥类型,默认是 rsa ,可以省略。
    -C 设置注释文字,比如邮箱。
    -f 指定密钥文件存储文件名。

    以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,
    当然,你也可以不输入文件名,使用默认文件名(推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。

    接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码),

    当然,你也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交到github上了.

    添加你的 SSH key 到 github上面去

    a、首先你需要拷贝 id_rsa.pub 文件的内容,你可以用编辑器打开文件复制,也可以用git命令复制该文件的内容,如:

    `$ clip < ~/.ssh/id_rsa.pub``
    b、登录你的github账号,从又上角的设置( Account Settings )进入,然后点击菜单栏的 SSH key 进入页面添加 SSH key。

    c、点击 Add SSH key 按钮添加一个 SSH key 。把你复制的 SSH key 代码粘贴到 key 所对应的输入框中,记得 SSH key 代码的前后不要留有空格或者回车。当然,上面的 Title 所对应的输入框你也可以输入一个该 SSH key 显示在 github 上的一个别名。默认的会使用你的邮件名称。

    如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
    如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

    查看配置信息

    要检查已有的配置信息,可以使用 git config --list 命令:

    $ git config --list
    http.postbuffer=2M
    user.name=runoob
    user.email=test@runoob.com
    

    Git 创建仓库

    git init

    Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。

    在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变.
    如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:

    $ git add *.c
    $ git add README
    $ git commit -m '初始化项目版本'
    

    git clone

    我们使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。

    克隆仓库的命令格式为:

    git clone <repo>
    git clone <repo> <directory>
    

    参数说明:
    repo:Git 仓库。
    directory:本地目录。
    比如,要克隆 ims0 代码仓库 root,可以用下面的命令:

    git clone git://github.com/ims0/root.git
    

    执行该命令后,会在当前目录下创建一个名为root的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。
    如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字.

    指定clone 的深度,或者时间, 来减少拉取无用的log

    深度用 --depth

    git clone 中加入参数 --depth=1,只拉取最近的一个 revision。
    git clone --depth=1 https://github.com/torvalds/linux.git
    

    指定log开始时间用 --shallow-since

    git clone git://github.com/ims0/root.git --shallow-since "2017-10-22"
    git clone git://github.com/ims0/root.git --shallow-since "2017-10-22 00:00:00"
    git clone git://github.com/ims0/root.git --shallow-since="Mon Oct 23 13:38:21 2017 +0800"
    git clone git://github.com/ims0/root.git --shallow-since="Oct 23 00:00 2017"
    

    撤销操作

    从暂存区恢复文件

    用暂存区的文件覆盖工作区对某个文件的修改: git checkout -- readme.md
    这种情况用于readme.md 添加到暂存区后,又做了一些错误的修改,想恢复到暂存区的状态
    无论readme.md 是否提交到仓库,都是以暂存区为模板来恢复。

    从仓库恢复某个文件

    加入一个工作区/暂存区/仓库都不一样,想要工作区恢复到和仓库一样
    1,使用git reset HEAD 把仓库中的指定文件恢复到暂存区
    2,使用git checkout -- 把暂存区的指定文件恢复到工作区

    版本退回

    1,仓库版本覆盖整个工作区 git reset --hard HEAD
    2,前一个仓库版本覆盖整个工作区 git reset --hard HEAD^
    3,前两个仓库版本覆盖整个工作区 git reset --hard HEAD^^
    4,前n个仓库版本覆盖整个工作区 git reset --hard HEAD~n
    5,根据版本号回退 git reset --hard 版本号,(使用 git reflog 查看版本号)

    版本前进

    1, 打印log: git reflog
    2, 根据id 前进到指定版本: git reset --hard commit_id

    分支操作

    总结创建与合并分支命令如下:

    查看分支:git branch

    创建分支:git branch name

    切换分支:git checkout name

    创建+切换分支:git checkout –b name
    
    合并某分支到当前分支:git merge name
    
    删除分支:git branch –d name
    

    git clean

    git clean -f
    git clean -fd
    # 连 .gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
    git clean -xfd
    
    # 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
    git clean -nxfd
    git clean -nf
    git clean -nfd
    
    查看ignore 文件
    git clean -Xn
    
    删除ignore 文件
    git clean -Xdf
    

    git blame

    显示指定行
    git blame -L 40,60 foo
    git blame -L 40,+21 foo

    .gitconfig

    [alias]
    	st = status
    	co = checkout
    	br = branch
    	ci = commit
    	pop = stash pop
    	last = log -1 HEAD
    	res0 = reset HEAD
    	res1 = reset HEAD^
    	reh0 = reset --hard HEAD
    	reh1 = reset --hard HEAD^
    	lg = log --color --graph --pretty=format:'%Cred%h%Creset %C(bold blue)<%an>%Creset ---%C(yellow)%d%Creset %s  %Cgreen(%cr)' --abbrev-commit
           
            d = diff --name-only
            dv = difftool
     [diff]
         tool = vimdiff
     [difftool]
         prompt = false
         trustExitCode = true
    

    gitconfig 命令行配置

    git config --global alias.st status
    git config --global diff.tool vimdiff
    git config --global difftool prompt false
    

    git 补丁的应用

    创建patch 和diff

    某次提交之前的 n 次提交,包括当前 id 一共 n 个提交
    `git format-patch [commit id] -n提交`

    例如最近的一次提交,生成patch文件
    git format-patch [commit id] -1
    或者
    git format-patch HEAD^

    应用patch

    git apply patch

    暂存特定修改的文件

    git stash -- filename.ext
    

    git push

    git push origin HEAD:refs/for/master

    git pull 强制覆盖本地的代码

    git fetch --all
    然后,你有两个选择:

    git reset --hard origin/master
    或者如果你在其他分支上:

    git reset --hard origin/<branch_name>
    说明:

    git fetch从远程下载最新的,而不尝试合并或rebase任何东西。

    然后git reset将主分支重置为您刚刚获取的内容。 --hard选项更改工作树中的所有文件以匹配origin/master中的文件。

    要把远程origin仓库的xx分支合并到本地的yy分支

    标准的做法:
    git fetch origin 目标分支名 // fetch到远程仓库目标分支的最新commit记录到 ./git/FETCH_HEAD文件中
    git checkout 要被合并的分支名 // 切换到要合并的分支
    git merge FETCH_HEAD // 将目标分支最新的commit记录合并到当前分支

    举例说明:将远程origin仓库的xx分支合并到本地的yy分支。
    git fetch origin xx
    git checkout yy
    git merge FETCH_HEAD

    git切换到tag

    使用以下命令就可以取得对应tag的代码:

    git checkout tag_name
    此时git可能会提示你当前处于“detached HEAD” 状态。因为tag相当于一个快照,不能修改它的代码。需要在tag代码基础上做修改,并创建一个分支:

    git checkout -b branch_name tag_name
    上面命令的意思切换到指定的tag(tag_name),并创建一个分支,本地重新命名(branch_name)。

    以SpringBoot的版本为例:
    git checkout -b tag-2.2.1.RELEASE v2.2.1.RELEASE

    修改远程分支

    比如github走加速
    git remote set-url origin https://github.com.cnpmjs.org/

    github 免密push

    ssh-keygen 公钥生成
    git config --global user.email "xxx@xxmail.com"
    git config --global user.name "xxx"
    git config --global credential.helper store # git push的时候记住用户名和密码
    git config --global push.default simple
    ————————————————

    使用github_token访问

    1. clone时使用token
      git clone https://scuzzlebuzzle:@github.com/scuzzlebuzzle/ol3-1.git --branch=gh-pages gh-pages
    2. 修改已有repo为token认证
      git remote set-url origin https://username:${github_token}@github.com/username/repo.git

    github 权限不足

    remote: Invalid username or password.
    fatal: Authentication failed for 'https://github.com/ims0/comTutor.git/'

    解决https 改为 git

    git remote set-url origin  git@github.com:ims0/comTutor
    

    https://stackoverflow.com/questions/18935539/authenticate-with-github-using-a-token

  • 相关阅读:
    Python之路【第八篇】(一)python基础 之计算机操作系统发展史
    Python之路【第六篇】python基础 之异常处理
    Python之路【第七篇】python基础 之socket网络编程
    Python之路【第六篇】python基础 之面向对象进阶
    Python之路【第六篇】python基础 之面向对象(一)
    Fastdfs 部署干货
    Mysql 优化配置2
    Elk 进阶部署
    Elk
    python pickle
  • 原文地址:https://www.cnblogs.com/ims-/p/9697028.html
Copyright © 2011-2022 走看看