• Git常用命令及思维导图


    设置

    git config —global user.name "xiaodan.lu"
    git config —global user.email "xiaodan@feixun.com.cn"
    git config —global color.ui "always" //或者"auto", always不仅Base环境是彩色,Dos里也是彩色的。
    git config —global alias.ci "commit" //别名缩写
    git config —global merge.tool //可以设置合并工具
    git config —global —list //查看设置 

    初始化 :

    git init 

    纳入版本控制:

    git add *.txt //添加所有txt文件
    git add README //添加单个文件
    git add . //添加所有文件包括子目录,但不包括空目录 
    add命令是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等)注意每次修改后都要重新add,不然就会提交之前add时的版本。 
    git add -i //进入交互式add
    git add -p //直接进入补丁模式,可以暂存修改的一部分。 

    提交:

    git commit -m "initial project version"
    git commit -m "something" someFile //提交指定文件
    git commit -C HEAD -a —amend //复用HEAD留言,增补提交(修改小错误,而不增加提交记录) 

    参数:

    -m "提交的说明"
    -a 动把所有已经跟踪过的文件暂存,并提交.(工作目录中修改过的文件都提交到版本库,不需一个一个手动add了)
    —amend 增补提交
    -C 复用指定提交的提交留言
    -c 打开编辑器在已有的提交基础上编辑修改 

    e.g 修改最后一次提交: 

    git commit -m 'initial commit'
    git add forgotten_file
    git commit --amend
    如果没有修改就相当于更改提交说明,上边3个命令得到一个提交. 

    忽略提交的文件:

    所有人都需要忽略的文件要写在.gitignore文件里,而只有自己的个人偏好需要忽略的文件要写在.git/info/exclude文件中 

    语法:

    1. 此为注释 – 将被 Git 忽略
      *.a # 忽略所有 .a 结尾的文件
      !lib.a # 但 lib.a 除外
      *.[oa] #忽略以.o或.a结尾的文件
      *~ #忽略以~结尾的文件
      /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
      build/ # 忽略 build/ 目录下的所有文件
      doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
      查看文件改动:
      git diff // 比较工作目录与缓存区的区别
      git diff —cached 或者 git diff —staged //缓存区与版本库里的区别
      git diff HEAD //三者的区别 
      请注意,单单 git diff 不过是显示还没有暂存起来的改动,而不是这次工作和上次提交之间的差异。所以有时候你一下子暂存了所有更新过的文件后,运行 git diff 后却什么也没有,就是这个原因。
      git diff 18f822e //18f822e这个版本与当前目录的区别 
      git diff aaaaa..bbbbb //比较aaaaa与bbbbb之间差别
      git diff —stat可以统计数据,比较特别的命令 
      重命名,移动,删除文件:
      git mv file_from file_to //改名或移动 
      $ git mv README.txt README
      $ git status
    2. On branch master
    3. Your branch is ahead of 'origin/master' by 1 commit.
      #
    4. Changes to be committed:
    5. (use "git reset HEAD <file>..." to unstage)
      #
    6. renamed: README.txt -> README
      其实,运行 git mv 就相当于运行了下面三条命令: 
      $ mv README.txt README
      $ git rm README.txt
      $ git add README 
      必须调用 git rm 文件名 //从暂存区移除,并且文件也被删除 
      如果只是手工删除了文件,运行git status时会出现 
    7. Changed but not updated:
    8. (use "git add/rm <file>..." to update what will be committed)
      #
    9. deleted: grit.gemspec
      此时必须再运行 git rm 文件名,才会在提交时候不再纳入版本管理.
      如果删除之前修改过并且已经add到缓存区了的话,则必须强制删除 -f 
      另外一种情况是,我们想把文件从Git仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆.a编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上,用 —cached 选项即可: 
      查看状态:
      查看当前状态:
      git status 
      $ git status
    10. On branch master
    11. Changes to be committed: //只要在这行后边的,说明放入暂存区了
    12. (use "git reset HEAD <file>..." to unstage) //想取消放入缓存 git reset HEAD README
      #
    13. new file: README
    14. Changed but not updated: //跟踪文件内容改变,但还没有放到暂存区,需要git add 命令才会放到暂存区
    15. (use "git add <file>..." to update what will be committed)
    16. (use "git checkout – <file>..." to discard changes in working directory) //删除修改,恢复到之前版本,有危险 (如果想保留并且回退版本用stashing 和分支来处理)
    17. modified: benchmarks.rb
      查看提交历史:
      git log 
      这时"j"向下浏览,"k"向上浏览,"q"退出 
      git log —pretty=oneline //一行显示
      —pretty="%h %s" //以各种格式输出 
      git log –p -2 //-p显示每次提交的内容差异 -2表示最近2次更改 
      git log —since "5 hours"
      —since "3 hours"
      —since "1 minute"
      —before ="2008-10.01" 
      git log 27j34j3j..03u43u23 //最老版本..最新版本(不包括起点只包括终点)
      git log 34j4j4..HEAD
      git log fhfs8fh.. //省略HEAD
      git log "HEAD^".."HEAD" //windows必须加引号表示回溯上一个提交
      git log -1 HEAD~1 //相当于git log -1 HEAD^
      问责:查明谁修改了代码
      git blame hello.html //你也可以用"-L"参数在命令(blame)中指定开始和结束行:
      git blame -L 12,+10 hello.html //12到22行
      blame还可以跟踪内容复制,文件复制,略,见版本控制之道 79页 
      撤销:
      撤销缓存区的修改(没有commit的)
      git checkout head 文件名 //撤销暂存区的修改 
      git checkout head readme.txt todo.txt
      git checkout head *.txt
      git checkout head . //撤销所有 
      反转提交:
      git revert HEAD //创建一个反向的新提交抵消原来的提交改动
      如果需要反转多个,必须从最后的开始反转, 加 -n可以不马上提交,之后一起提交。
      git revert -n HEAD
      git revert -n 54efhds
      git commit -m "revert head and 54efhds" 
      复位:还没有commit,让工作目录回到上次提交时的状态
      git reset —hard HEAD //所有未提交的内容清空,这会让"git diff" 和"git diff —cached"命令的显示法都变为空
      git reset —soft HEAD //复位版本库,暂存差异,便于提交中发现错误需要更改时有用(例如私人密码放到里边了) 
      分支:
      在当前分支末梢建立分支:
      git branch RB_1.0(建立分支不会自动切换过去) 
      切换分支:
      git checkout RB_1.0(切换到RB_1.0分支) 
      创建并切换分支:
      git checkout -b RB_1.0(简化上边2步操作)
      删除分支:
      git branch -d RB_1.0 
      基于某次提交、分支或标签创建新分支:
      git branch RB_1.0 master
      git branch RB_1.0 6fe57de0
      git branch Rb_1.01 1.0 
      查看分支:
      git branch //列出本地分支
      git branch -r //显示远程分支
      git branch -a //列出所有分支 
      其中,*master //*号表示当前所在分支
    • 分支重命名:
      git branch -m master mymaster
      -M 大写M会覆盖同名的分支 

      合并分支:

      直接合并:
      git merge 想合并到当前分支的源分支名
      git merge —no-commit 分支 //合并但不提交 

      压合合并:将分支压合成一条commit记录,并合并过来

      git merge —squash 某bug分支
      git commit -m "修复某bug" 

      拣选合并:只合并一个提交

      git cherry-pick 321d76f
      如果需要连续拣选,就需要加 -n参数
      然后再git commit ,但不要加-m参数,编辑器就会使用刚拣选的提交留言作为现在的留言。 
      标签Tag:
      查看标签:
      git tag
      创建标签:
      git tag 1.0 //在当前分支最后一次提交创建标签
      git tag 1.0 RB_1.0 //基于RB_1.0分支的最新踢脚创建标签
      git tag 1.0 ae468d8kt //为某次提交创建标签 

      检出标签:

      git checkout 1.0 //检出标签与检出分支一样操作,但检出标签后用git branch查看本地分支会发现你现在不再任何分支上
      这时你不应该修改,而应该立即基于此标签创建一个分支
      git checkout -b from-1.0 

      变基:

      1)git rebase RB_1.01 //也许修改过一个bug,希望新版本变基到RB_1.01分支上
      2)手动解决冲突 //如果解决不了直接git rebase -skip或-abort来跳过特定提交或完全放弃变基
      3)git add xxx.html //冲突解决
      4)git rebase —continue 
      git rebase --onto HEAD^^ HEAD^ HEAD 
      //—onto参数可以改写历史抹掉中间的参数,将倒数第一个参数变基到倒数第3个参数,为防止出错建议在试验性分支上先试验。 
      rebase -i 可以排序历史记录,多个提交合并为1个,一个提交分解成多个提交 ,
      详见版本控制之道p86 ,需要编辑器支持,windows记事本不行 

      远程相关:

      git clone git://github.com/schacon/grit.git //从现有仓库克隆
      git clone git://github.com/schacon/grit.git mygrit //换名,唯一区别就是新建的目录成了mygrit,其他都一样 

      添加远程仓库:

      git remote add pb git://github.com/paulboone/ticgit.git
      clone会默认添加origin仓库,如果原本用git init创建的版本库,后来又想提交到远程版本库,就可以用下边的办法
      git remote add origin git@example.com:/xxxxxx 

      查看远程分支:

      git remote -v //查看远程仓库,默认clone后,应该有一个origin仓库,-v显示对应的clone地址
      git remote show origin //查看远程仓库信息 

      远程仓库重命名和删除:

      git remote rename pb paul
      git remote rm paul 

      获取数据:

      git fetch [remote-name] 拉取远程仓库到本地远程仓库,不自动合并 //$ git fetch origin
      $ git fetch pb
      remote: Counting objects: 58, done.
      remote: Compressing objects: 100% (41/41), done.
      remote: Total 44 (delta 24), reused 1 (delta 0)
      Unpacking objects: 100% (44/44), done.
      From git://github.com/paulboone/ticgit
      [new branch] master -> pb/master
      [new branch] ticgit -> pb/ticgit
      现在pb/master可以在本地访问了,你可以合并到自己的某个分支,或者切换到这个分支看看有什么有趣的更新 
      git pull 抓取数据合并到工作目录中当前分支 

      推送数据:

    • git push [remote-name] [branch-name] //默认为 git push origin master 
      git push origin serverfix //推送分支,其实是下边一句的简化,提取我的 serverfix 并更新到远程仓库的 serverfix 
      git push origin serverfix:serferfix 
      git push origin :serverfix //这个语法用于删除,只要把分号前留空 

      其他:

      git gc //垃圾回收,每隔一段时间例如一个月运行一次可以减少磁盘占用空间。
      git reflog //最后的保障,列出误删的东东
      git bisect //二分查找,版本控制之道p124页,略 

      归档版本库,导出压缩包:

      git archive —format=格式 —prefix=目录/ 版本>压缩包.zip
      git archive —format=zip head>test.zip
      git archive —format=tar —prefix=mysite-1.0/ 1.0 | gzip>mysite-1.0.tar.gz
      git archive —format=zip —prefix=mysite-1.0/ 1.0 >mysie-1.0.zip

      下面这张图就可以总括全文了

  • 相关阅读:
    小程序mpvue使用scroll-view
    mysql之join浅析
    YApi-v1.9.2部署失败(Accessing non-existent property 'count' of module exports inside circular dependency)的解决方案
    YApi 可视化部署时遇到9090端口被占用时的解决方案
    [转载]最近涉及字符串列表存储,为加快检索速度,搜集了一些哈希函数,C语言的代码保存见内
    字符串的编码检测
    mbcs、unicode,UTF-8、UTF-16等的转换
    支持多重结构的配置信息读取代码,基于VS2008
    配置信息读取代码(VS2012编译通过,使用了C++11特性)
    [转载]TCPMP0.72RC1的编译与移植以及自己另外做UI完整方法
  • 原文地址:https://www.cnblogs.com/chenbin7/p/2643509.html
Copyright © 2020-2023  润新知