zoukankan      html  css  js  c++  java
  • git 命令整理

    local-初始化

    全局变量

    • git config --global user.name "jerry"
    • git config --global user.email "jerry@163.com"
    • git config --global color.ui "always"
    • 解决中文乱码问题

      • 解决bash控制台ls命令中文文件乱码:

        在Git\etc\git-completion.bash 文件中追加一行 alias ls="ls --show-control-chars --color=auto"

      • 解决bash控制台 git commit 无法输入中文注释:

        修改Git\etc\inputrc文件

        set output -meta on

        set convert -meta off

      • 解决git log命令中文注释乱码(只bash控制台好用):

        在Git\etc\profile文件中追加一行:export LESSCHARSET=iso8859

      • 解决gitk显示中文注释乱码

        git config --global i18n.commitencoding ISO-8859

        git config --global i18n.logoutputencoding ISO-8859

    初始化新版本库

    • git init

      *只会在根目录下创建一个名为.git文件夹

    设置忽略的文件

    • 设置每个人都要忽略的文件

      1. 在根目录新建一个名为.gitignore的文本文件

        在命令行执行 echo *.jpg>.gitignore (注意>号左右不要有空格)

      2. 将.gitignore文件加入版本库并提交
    • 设置只有自己要忽略的文件

      修改.git/info/exclude文件,可使用正则表达式

    添加新文件到版本库

    • 添加单个文件

      git add somefile.txt

    • 添加所有txt文件

      git add *.txt

    • 添加所有文件

      git add

    提交

    • git commit -m "add all txt file"

    local-日常操作

    提交

    • 提交所有修改

      git commit -m "some msg" -a

    • 提交单个文件

      git commit -m "some msg" one.txt

    • 增补提交

      git commit -C head -a --amend

    撤销修改

    • 撤销尚未提交的修改

      • 撤销1、2个文件

        git checkout head readme.txt foto.txt

      • 撤销所有txt文件

        git checkout head *.txt

      • 撤销所有文件

        git checkout head

    • 撤销提交

      • 反转提交。反转提交但不提交。

        例:反转最近一次提交:git revert --no -commit head

        *相当于提交最近一次提交的反操作

      • 复位

        • 取消暂存

          git reset 或 fit reset head &lt filename &gt

        • 复位到head之前的那个版本

          git reset -head head^^

          *不会在版本库中留下痕迹。使用^^或^

    分支

    • 列出本地分支

      git branch

    • 列出所有分支

      git branch -a

    • 基于当前分支的末梢创建新分支

      git branch &lt branchname &gt

    • 基于某次提交、分支或标签创建新分支

      • git branch emputy bfe57de0

        *用来查看某个历史断面

      • git branch emputy2 emputy
    • 合并分支

      • 普通合并

        • 合并并提交

          git merge &lt branchname &gt

          *如果发生了冲突,就不会自动提交,如果冲突不多,不想立即解决他们,可以直接使用git checkout head 撤销

        • 合并但不提交

          git merger --no-commit

          实测结果,--no-commit 参数没有生效

      • 压合合并

        • 压合合并后直接提交

          git merge --squash &lt branchname &gt

        • 合合并后但不提交

          git merger --squash --no-commit

          *两个人合作开发一个新功能时,需要在一个分支上提交多次,开发完成之后在压合成一次提交

      • 拣选合并

        • 挑选某次提交合并但不提交

          git cherry-pick --no-commit 5b54b4

          *但是要合并的提交只要比当前高2个版本,就会出现奇怪的冲突问题

    • 重命名分支

      • git branch -m &lt branchname &gt &lt newname &gt

        *不会覆盖已存在的同名分支

      • git branch -M &lt branchname &gt &lt newname &gt

        *会覆盖已存在的同名分支

    • 删除分支

      • git branch -d &lt branchname &gt

        *如果分支没有被合并会删除失败

      • git branch -D &lt branchname &gt

        *即使分支没有被合并会删除

    • 切换分支

      • git checkout &lt branchname &gt

    解决冲突

    • 冲突很少时

      直接编辑有冲突的文件然后提交即可

    • 冲突比较复杂时

      git merge tool

      1. 会生成.BACKUP, .BASE, .LOCAL和.REMOTE四个文件
      2. 然后自动调用冲突解决工具
      3. 解决之后手动删除.orig文件(冲突解决之前的文件备份)
      4. 提交

    标签

    • 创建标签

      • 为当前分支最近一次提交创建标签

        git tag 1.0

        *标签没有重命名

      • 为A分支最近一次提交创建标签

        git tag A_1.0 A

        *也可以把标签命名为A/1.0

      • 为某次历史提交创建标签

        git tag 1.0 4ed54x21

    • 显示标签列表

      git tag

    • 检出标签

      git checkout 1.0

      *查看标签断面很方便的方法,但是不能提交

    • 由标签创建分支

      • git branch b1.1.1.1
      • git checkout -b b1.1.1.1
    • 删除标签

      git tag -d 1.0

    查看状态

    • 当前状态

      git status

    • 历史记录

      • git log
      • gitk

        • gitk

          查看当前分支历史记录

        • gitk &lt branchname &gt

          查看某分支历史记录

        • gitk -all

          查看所有分支

    • 每个分支最后的提交

      git branch -v

    其他

    导出版本库

    • git archive --format=zip head>nb.zip
    • git archive --format=zip --prefix=nb1.0/ head>nb.zip

    remote-初始化

    克隆版本库

    • git clone &lt url &gt

      例:git clone d:\git\nb

    • *克隆之后会自动添加4个config

      remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*

      remote.origin.url=d:\usb

      branch.master.remote=origin

      branch.master.merge=refs/heads/master

    别名

    • 添加远程版本库的别名

      • git remote add &lt 别名 $&gt &lt 远程版本库的url &gt
      • *添加别名后会自动添加2个config

        remote.origin.url=d:\usb

        remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*

    • 删除远程库的别名和相关分支

      git remote rm &lt 别名 &gt

    创建一个无本地分支的库

    • git init -bare

      *当需要一个公用的中央库时,非常适合把它简称bare库

    remote-日常操作

    分支

    • 列出远程分支

      git branch -r

    • 删除远程库中已经不存在的分支

      git remote prune origin

    从远程库获取

    • 获取但不合并

      git fetch &lt 远程版本库 &gt

      例:git fetch origin 。origin是远程库的默认别名

      例:git fetch d:\git\nb

    • 获取合并并到当前本地分支

      • git pull

        *等价于git pull origin

        *需配置branch.master.remote=origin和branch.master.merge=refs/heads/maeter。 如果使用了git clone克隆远程库会自动添加这个配置

      • git pull d:\git\nb master

        *由于不是从默认远程库获取,所以要指定获取哪个分支

    推入远程库

    • git push origin master

      *远程的master不能是当前分支

    remote-github

    生成SSH Key

    1. 启动Git Bash控制台(git -bash.bat)
    2. 如果以前生成过SSH Key,要先备份

      $cd ~/.ssh

      $mkdir key_backup

      $cd id_rsa*key_backup

      * ~/.ssh就是C:\Users\jcl\.ssh

    3. 生成SSH Key

      $ssh-keygen -t rsa -C "jerry@163.com"

      *提示Enter passphrase时要输入密码

      *生成的SSH Key存放在C:\Users\jcl\.ssh

    4. 将SSH Key添加到Github账户里

      点击链接Account Settings|SSH Public Keys|Add another public key,将id_rea.pub文件中的内容粘贴到key文本框中

    5. 第一次连接到Github

      $ssh git@github.com

      输入密码后如果显示信息里包括you've successfully authenticated表示链接成功。之后会在C:\Users\jcl\.ssh建立一个名为known_hosts的文件

    创建新库

    • 进入Dashboard Tab 页,点击New Repository按钮

      *免费的只能public

    克隆版本库

    • 进入新建的库,点击SSH按钮,复制版本库地址,然后使用git clone命令即可

      *点击Git Read-Only按钮可获取只读权限的地址,克隆这个地址不需要密码

    让ssh-agent替我们记住密码

    1. 把密码加密保存在硬盘上

      $ssh-keygen -p

    2. 修改配置文件,让ssh-agent随git bash启动

      在Git\etc\profile中追加:

      #lanch ssh agent

      SSH_ENV="HOME/.ssh/environment"

      fucntion start_agent{

      echo "Initializing new SSH agent.."

      /usr/bin/ssh-agent|sed's/^echo/#echo/' > "${SSH_ENV}"

      echo succeeded

      chmod 600 "${SSH_ENV}"

      ."${SSH_ENV}" > /dev/null/usr/bin/ssh-add

      }

    3. #Source SSH setting, if applicable

      if[ -f "${SSH_ENV}"]; then

      ."${SSH_ENV}" > /dev/null

      #ps ${SSH_AGENT_PID} doesn't work under cywgin

      ps -ef| grep ${SSH_AGENT_PID}|grep shh-agent$ > /dev/null||{

      start_agent;

      }else

      start_agent

      fi

  • 相关阅读:
    BZOJ 1088 模拟(扫雷经验…)
    BZOJ 1529
    BZOJ 3224
    BZOJ 1192
    BZOJ 1012
    博客搬家说明
    BZOJ 2423 DP
    BZOJ 1789&1830 推式子 乱搞
    BZOJ 1588
    拆点:虫洞
  • 原文地址:https://www.cnblogs.com/kuler/p/3106531.html
Copyright © 2011-2022 走看看