git用法记录

1. git 常用命令
-----------------------------------------------------------------------------------------------------
* git init
   创建一个本地git仓库,如果你没有服务器,但想用git来管理本地代码,可以创建一个本地git仓库
   除了没有git push到远程服务器的操作外,其他都与正常git使用无异,对于本地代码开发管理挺实用的。
   例如: cd  myRepo ; git init   这样将你的代码文件放到myRepo,然后就可以git add, git commit等git操作
* git add
   将文件添加到git仓库,留意这3个参数区别 .  -u  -A 
      git add .     会将所有变化提交到暂存区,包括内容修改modified,新文件new,但不包括被删除的文件
    git add -u    会将被跟踪的文件(tracked file)的改动提交到暂存区,但不会提交新文件(untracked file)
    git add -A    是上面两个的集合
* git status
   查看状态,会把当前仓库下所有tracked和untracked都显示出来
   但有时候那些.o, .ko等编译产生的文件我们不希望也显示出来干扰,可以在仓库目录下创建 .gitignore
    并把这些文件用通配符表示在该文件中,一行一种类型,比如
    vi   .gitignore
       *.o
       *.ko
    这样在用 git status 时就不会再将这些无关文件显示出来了
* git clone
   将远程git仓库克隆一份到本地,相当于svn check out
   git clone   git_url    例如: git clone git@git.baidu.com:software/trunk_wl.git
   
* git remote show origin
   获取远程git仓url地址,如下不仅可以知道该远程git仓地址,还可以知道它有哪些branch
   
 *  git branch
    ** 查看当前git仓有多少个branch,当前正在哪个branch:  git branch -a
    ** 删除本地分支: git branch -D br_name
    ** 如何知道本地分支跟踪关联远程仓库上到哪个分支 : git branch -vv 
* git checkout
    ** 切换分支, git checkout -b <new_branch> <start_point>
        比如通过git branch -a 知道当前正在master分支上,同时仓库还有nexus_ftl_staging_a分支        
    ** 上面-b是在本地分支还未创建到情况下,如果本地分支已经有了,比如有本地分支A和B,要切到A上
         就只需要 git checkout A  
    ** 切换到某个tag上
        通常做法是建一个分支,然后把tag拉到这个分支上,用法: 
          git tag     查看当前有哪些tag,比如有 v2.7
          git checkout -b  tag_br v2.7     将tag 2.7拉到新到分支 tag_br上
    ** 从指定某笔提交创建分支
        git checkout -b <new-banch> <commit-id>   // 从指定<commit-id>上创建分支new-banch

* git log
   ** 查看每次提及的差异内容: git log -p -2 
       -2 是查看最近2次的提及差异,-p显示差异内容    
 * git patch
    介绍git下产生和应用patch的方法: http://blog.csdn.net/maybe_windleave/article/details/8703778
    ** 生成patch:git diff > patch   对应应用此patch可以用命令:git apply patch
        在应用这个patch之前如果不放心它是否能全部打上去,可以用 git apply --check patch 先检查,没有任何输出表示没问题
    ** git log -5   >> 查看最近5笔提交
        git diff <commit-id.x>  <commit-id.x+1> > patch   >> 根据commit id找出想要到某两笔之间到修改差异,保存为 patch
    ** git show <commit-id>  > patch    >> 根据commit id找出某笔修改差异,保存为 patch
* git fetch 和 git pull 和 git push
    从远程分支获取最新版本到本地,git fetch 从远处获取最新版本到本地,但不会自动merge.
    git pull 是从远程获取最新版本并merge到本地。
     ** 用法:
    git branch    >> 先看看本地是那个分支,假定是 master
    git fetch origin master:tmp   >> 从远程origin仓库master分支获取最新版本到本地,但没merge到本地,只是先放到临时开到tmp分支
    git diff tmp  >> 可以看到远程master分支上最新版本跟本地master分支到差异
    git merge tmp  >> 将差异merge到本地
    git branch -D tmp  >>  删除临时tmp分支
    如果本地是干净到,只是要跟远程做下同步,那么可以用 git pull origin master  它相当于 git fetch origin master:tmp + git merge tmp
    在实际使用中,建议用 git fetch,它可以在merge前查看更新情况,再决定是否合并
     ** git pull <远程主机名> <远程分支名>:<本地分支名>
         如拉取远程的master分支到本地wy分支, git  pull origin master:wy

    git fetch / git pull 是从远程分支同步代码到本地,git push 是将本地commit到修改推送到远程分支
     ** git push 用法:
          git status   看看本地commit跟远程分支上有哪些改动,会看类似:
        Your branch is ahead of 'origin/nexus_ftl_staging_a' by 2 commits.
         (use "git push" to publish your local commits)
          git push origin master:master   其中 origin是远程主机名,master是本地分支名,后面这个master是远程分支名
        可以通过git remote 查看远程主机名,git branch 查看本地当前分支名,通常本地分支名取与远程分支名一样
        所以上面可以简写成: git push origin master   即git会自动根据本地分支名去查找远程同名分支,若没找到会自动创建一个新分支
        推荐完整写上本地分支名和远程分支名
* git diff
    查看工作区文件跟上次提交快照到差异,可以直接用   git diff <file>
    如果某个文件已经git add到暂存区,但还为commit,即要查看暂存区文件跟上次提交快照到差异,可以用   git diff --cached  <file>
* git reset
    已经commit到某笔提交,想要撤销: git reset --hard HEAD^    (HEAD^是上一次提交,HEAD^^上上次提交,也可以写成HEAD~2,依次类推)
    --hard会撤销到比较彻底,本地文件也会被删除.
* git config
    查看当前提交人信息:git config --list 
    主要是 user.email 和 user.name 这两个信息,可以这样修改:
    git config --global user.email "shang.zhang@baidu.com"
    git config --global user.name "shang.zhang"
    git config --global credential.helper store    // 保存用户名密码,不用每次都输入

* git stash
    git stash可用来暂存当前正在进行到工作,比如切换一个分支,如果当前有修改会提示你先提交,但这时又不想提交,就可以用git stash
    先将这些修改隐藏起来。待在切换后到分支上工作完成后要切回来,回到之前到哪些修改,就可以用 git stash pop 恢复当时隐藏到修改
    git stash   隐藏修改
    git stash pop   恢复修改
* git archive
    如何将某个tag文件全部导出(不带仓库管理文件),有时候要导出一份干净的仓库代码,就会需要用到这个命令
    如果你的tag名是 v2.7 (可以先用 git tag 查看当前有哪些tag), 可按如下方式导出:
    ** 导出并压缩为 zip 格式: git archive --format=zip --output=v2.7.zip  v2.7
    ** 导出并压缩为 tar.bz2 格式: git archive v2.7 | bzip2 > v2.7.tar.bz
    ** 导出并压缩为 tar.gz格式: git archive --format=tar  v2.7 | gzip > v2.7.tar.gz
* git revert
  撤销已提交的修改。加入一笔已经push的修改要撤销,可以这么做:
  git revert <commit-id>   // 要先确保本地是干净的,<commit-id> 是指定要撤销的某笔提交
  git push origin 远程分支名:本地分支名  // revert后重新提交,这一步让本地和远程都同步 revert
  其实相当于重新提交了一笔修改,这笔修改的内容就是去掉要撤销的内容.
  与 git reset的区别是 revert 可以留下提交痕迹,而reset则是删除,不留痕迹
* git bash
   git bash是windows下用的git 命令行工具.
   #1. git bash 执行很慢的问题
         >> git bash默认会去查找windows文件服务器,比如/h/bin,这就导致很慢。查找路径有HOME变量定义
               可以将HOME变量添加到windows系统用户变量中,比如我的win10是这么添加的
                我的电脑 右键 -- 属性 -- 高级系统设置 -- 环境变量 -- 在用户变量中新建  HOME = C:\Program Files\Git\etc\profile.d
                关闭git bash,重新打开后就明显快乐很多
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值