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

posted @ 2013-05-29 18:33  库乐君  阅读(628)  评论(0编辑  收藏  举报