zoukankan      html  css  js  c++  java
  • Git 本地操作

     
     
    • 官方下载网站
    • 官方文档


    • Amend Last Commit 修正上次提交

    • Stage Changed Files to Commit 缓存修改的文件为提交
    • Ustage to Commit 从本次提交中撤除
    • Revert Changes 撤销删除
    • Sign Off 签名
    • Fetch 获取
    • Prune 清除
    • Push 上传
    • Unstaged Changes 未缓存过的提交
    • Stage Changed 缓存改动
    • Portions staged for commit 部分缓存为提交
    • history repository 历史仓库

    命令

    • git conifg –help 会弹出网页版的帮助文档
    • git help config 同样也是获得帮助文档
    • clear 清屏
    • f 向下翻页
    • b 向上翻页 

    git config 增删改查 init clone add commit status rm mv ignore

    • git config –global user.name “helloworld”
    • git config –global user.email “352111644@qq.com”
    • git config –global –add user.name “eoe”:增加键值对eoe
    • git config –global user.name “eoe”:修改键值对为eoe
    • git config user.name:获取最新的user.name
    • git config –get user.name:获取最新的user.name
    • git config –list –global:获取所有的global中的键值对
    • Git config – global –unset user.name “eoe”:删除user.name,当只有一个用户名是,可以不加后面的名字直接删掉


    • git init git_non_bare_repo:初始化一个目录,附带一个.git的子工作目录

    • git init –bare git_non_bare_reop:不附带.git的子工作目录,而是把.git目录里的东西放出来的
    • git init:在当前文件夹中直接进行初始化,附带.git子目录
    • git clone git_bare_repo/ git_clone_reop:克隆本地仓库
    • git clone URL:克隆服务器上的仓库 

    Working Directory、Staging Area、History Repository相关操作 的工作流程

    • git init git_basics
    • cd git_basics/
    • touch a
    • touch b
    • git add a b:将文件添加到暂存区
    • git status:查看暂存区
    • git commit -m “Initial commit”:将文件提交的历史记录里面,” “中间是提交信息
    • vim a:在a中加入一些提示信息
    • git status:将会显示红色的modefied a表示a文件修改了,但是还没有保存到暂存区里面
    • git add a:将修改后的a添加到暂存区
    • git status:显示绿色的modified a表示a文件修改了,并且已经保存到暂存区里了,准备被提交
    • git commit -m “modify a”:提交a
    • git rm a:同时把工作区和暂存去的a删除掉
    • git reset head a:只执行这一个还不能还原a,用ls命令可以看一下
    • git checketout a:执行这两个命令可以找回a
    • git rm –cached a:只删除暂存区里的a文件
    • git status:显示没有跟踪的文件a
    • git add a:重新添加a到暂存区
    • git mv a c:将a重命名为c
    • git status:显示rename:a -> c
    • 上面的那个git mv a c 可以分解为 
      1. mv a c:在自己的工作目录下将a重命名为c
      2. git status
      3. git add a c:可以实现相同的效果
    • git add -A:将整个工作区添加到暂存区里
    • 或者git add .:也是将整个工作区添加到暂存区了
    • cd ../git_ignore_demo/:进入部分不添加模板
    • vim .gitignore:创建gitignore文件,针对下面的那个图片里的目录
    *.[oa] //以o,a结尾的文件不要添加,通配符形式
    *~ //这种类型的是中间类型的文件
    *.pyc
    !test.pyc //加感叹号表示这个文件不要被忽略,要添加到暂存区
    !test.py //以感叹号开头的这个文件不要添加到缓存区
    foo/ //结尾匹配的是一个目录,但是文件名是foo的就匹配不到了
    **/res //**/代表匹配0个或多个目录名为"res"的目录,包括子目录
    build/
    Documentation/
    src/
    .Dx_Store
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 这里写图片描述
    • git status:显示没有被跟踪的文件只有git_ignore_demo、foo、test.py三个
    • git add .gitignore:将此文件添加到仓库中用于整个仓库的共享
    • git commit -m “add ignore”

    Git本地分支 branch tag checkout stash merge

    • git init git_checkout_merge
    • cd git_checkout_merge/
    • vim master.txt:创建新文件,增加历史记录
    Initial commit on master
    • 1
    • 1
    • git add .:放到暂存区
    • git commit -m “Initial commit on master”:提交进历史记录
    • vim master.txt:在刚才的基础上添加
    Second commit on master
    • 1
    • 1
    • git add .
    • git commit -m “Second commit on master”
    • git branch test:产生新的分支
    • git checkout test:切换到新的分支
    • vim master.txt:在test分支上继续添加
    Initial commit on test
    • 1
    • 1
    • touch test.txt:创建一个新的文件用于验证修改
    • git add .
    • git commit -m “Initial commit on test”
    • git checkout master:切换回master分支
    • ls:这是看不到刚才创建的test.txt文件
    • vim master.txt:刚才做的修改也看不见
    • 分支名代表最新提交的那个commit的引用,利用tag可以代表靠前的提交,而不用每次都去读历史记录
    • git log –oneline –decorate –graph –all:查看git仓库中的git tag对象,会显示出来每次的提交信息和各个分支名字相对应,带HEAD标志的是当前分支
    • git tag “v0” alaba30:创建一个轻量级tag,后面那一串是commit的hash,不指定默认是当前带HEAD标志分支的commit
    • git tag -a “INITIAL_COMMIT” alaba30:会提示输入一些tag的信息,输入”TAG for INITIAL_COMMIT”,然后退出即可
    • git tag:查看当前有那些tag
    • git log –oneline –decorate –graph –all:查看历史示意图
    • git config –global alias.lol “log –oneline –decorate –graph –all”:给命令起别名
    • git lol:查看历史的树状结构
    • git show v0:查看tag:v0,会显示commit信息
    • git checkout v0:指向一个”v0”commit,会提示detached HEAD,这样直接再回去时,修改可能会丢掉,会提示用 -b 命令
    • git checkout -b fix_v0:在当前标签切换到分支状态

    修改工作区的暂存区后保存

    • vim master.txt:在已有的文件中随便加点东西
    • git add .:添加到暂存区
    • git checkout master:会报错,提示没有将修改添加到历史记录,提交修改commit或者stash
    • git stash save -a “stash1”:参数a代表将暂存区保存起来
    • git status:显示当前状态很干净
    • git checkout master:在master分支上进行一些操作之后回去
    • git checkout fix_v0:回到v0分支
    • git stash list:会显示有stash@{0}的引用指向之前的stash
    • git stash pop –index stash@{0}:参数index表示把暂存区也还原回去
    • vim master.txt:刚才随便加的那句话也在里面
    • git stash lish:刚才的pop将stash清除了
    • git stash save -a “stash1”:重来一遍,这次将stash回复后还保存在list中
    • git stash list
    • git stash apply –index stash@{0}
    • git stash list:发现stash1还在里面
    • git stash drop stash@{0}:清除掉指定stash
    • git stash list
    • git stash drop:不加是哪个引用,默认清理第一个引用
    • git stash clear:清理所有的stash

    在某个时间的合并分支 merge

    • git checkout master
    • git checkou -b test _merg:创建merg分支,并切换到上面去
    • vim master.txt:修改,加入”Initial commit on test_merge”
    • git add.
    • git commit -m “Initial commit on test_merg”:将修改添加到历史记录里面
    • git lol:查看历史的树状结构,上面有是哪个命令的缩写,可以看到都是master分支衍生出来的
    • git checkout master
    • git merge test_merge:提示这是一个Fast-forward的merge,不需要merge,只需要让master指向test_merge所指向的commit即可
    • git lol
    • git merge test:test分支在前面用到,和master有冲突,会提示自动合并失败,先fix冲突,再来合并
    • git merge –abort:放弃这次合并,在提示合并有冲突后才执行的,如果不进行合并了必须执行
    • 如果不执行git merge –abort 取消合并则执行:
    • vim master.txt:打开冲突文件,发现不一样了,HEAD和====号中间的就是当前所处的分支内容,====和test中间的是test分支上的内容,按找自己的想法去掉其中一块的内容,并且去掉这些符号标记
    • git add master.txt:将master添加进暂存区
    • git commit:会弹出一个文本提示merge信息,退出就行了

    查看与对比历史记录 show log diff

    • git log –oneline –decorate –graph –all:查看完整的历史示意图,树状
    • git show de82fa8/master/HEAD:git show 以git的对象作为参数,显示当前分支的一个最新的提交的完整信息
    • git show master^:显示master的当前第一父提交
    • git show master^2:第二父提交
    • git show –oneline master^2:输出一个简短的信息
    • git show –stat master^2:输入提交做出改变的统计信息
    • git show –oneline –stat master^2:将功能组合起来
    • git tag:显示有那些tag对象
    • git show INITIAL_COMMIT:查看其中的一个对象
    • git show –format-%T master^2:通过格式化输入master的一些信息,会出现第一个40位的hash对象,是指向commit指向的那个tree的对象,可以利用是个hash,show那个tree,还有一个是index后面跟着的几个个HASH
    • git show HASH:通过刚才找到的那个hash可以显示tree对象及其中的文件,HASH是40位的前6位
    • git show HASH:这个HASH是在index后面跟着的那几个hash之一
    • git log:输出完整的历史信息
    • git log -p:输出commit之间的差异信息
    • git log –stat:每个commit之间差异的统计信息
    • git log –oneline:单行输出
    • git log –onelien –decorate –graph –all:输出所有分支的信息
    • git diff:输出工作区与暂存区的差异,没有差异则不显示
    • vim master.txt:随便修改一些
    • git diff:显示出一些信息
    • git add master.txt
    • git diff:又不显示了
    • git diff –cached:查看暂存区与历史的差异
    • git diff HEAD~2:比较当前工作区与其他历史提交的差异
    • git diff HEAD~2 – master.txt:比较某一个特定文件的差异
    • git diff –cached HEAD~2:比较暂存区与其他历史之间的差异
    • git diff HEAD HEAD~2:当前历史和前面两个历史的比较
    • git diff HEAD HEAS~2 – master.txt:指定文件的差异
    • vim master.txt:只是随便修改其中的一个单词
    • git diff –color-words:只显示单词的差异
    • git diff –word-diff:表示最新的修改

    撤销修改 checkout reset clean revert

    • git lol
    • vim master.txt:做一些修改并保存
    • git diff:看到工作区和暂存区之间的差异
    • git status
    • git checkout – master.txt:撤销对master.txt的本地修改
    • vim master.txt:已经恢复到刚开始了,再修改一下
    • git add master.txt
    • git status:显示有修改将要提交到历史记录中
    • git reset master.txt:撤销修改,还原暂存区
    • git diff –cached:显示暂存区没有差别了,暂存去的修改已经被撤消了
    • git status:发现本地内容和暂存区里的内容有了差异
    • git lol:找到第一个commit on master的内容,通过commit的手动输入的信息找
    • git checkout INITAL_COMMIT – master.txt:撤销对master.txt的本地修改
    • git status:工作区和暂存区没有区别
    • git diff – cached:查看暂存区内容和历史内容的区别
    • git checkout HEAD – master.txt:还原工作区和暂存区到最新的一个提交上
    • git reset INITIAL_COMMIT – master.txt:只还原暂存区,不动工作区
    • git status:发现工作区和暂存区内容不同
    • git diff:查看上面发现的差异
    • git diff –cached:查看暂存区和当前历史记录区别
    • git reset master.txt:还原回来
    • 清理编译等不需要的文件
    • touch test.o test.a:创建不需要提交的文件
    • ls
    • git clean -n:查看git可以帮自己清除的文件
    • git clean -f:强制让git帮自己清除,本地的文件也会清除
    • ls:已经没有了.o .a的文件了
    • vim .gitignore:设置忽略文件 “*.[oa]”,这是另一种方法
    • git add .gitignore
    • git commit -m “add ignore”
    • touch test.o test.a
    • touch test.c:.c还需要修改,.o .a可以不要了
    • git clean -n:发现仅仅会移除.c文件,因为上面的ignore文件中设置的,默认不清理ignore中的文件
    • git clean -n -X:显示将要清理的是.o .a文件,没有了.c文件,是大写的X
    • git clean -x -f:小写的x会移除.c .o .a三种文件,大写的X只会移除.o .a两种文件
    • 默写历史提交的内容不需要
    • git revert HEAD:删除上一步的历史记录,会显示Revert “add ignore”
    • ls -la:看不到ignore文件了

    重写历史记录 commit –amend rebase resert reflog

    • git checkout HEAD~ – .gitignore:还原上面删除的gitignore文件
    • git add test.c
    • git commit –amend:把前面的提交信息”Revert “add ignore” 和 下面的HASH码”删掉(前面不带#),然后添加”This is a amend commit”
    • git lol:看到刚才那个Revert的提交没有了,成了This is a amend commit
    • 查看git rebase功能
    • vim master.txt:随机添加一些东西
    • git add master.txt
    • git commit -m “conflict rebase”
    • git checkout -b test_rebase HEAD~:在这个之前的一个提交创建一个分支
    • vim master.txt:显示还没做出刚才的修改,添加”Initial commit on test_rebas”
    • git add master.txt
    • git commit -m “Initial commit on test_rebase”
    • git lol:希望让分支变成线性的来进行合并
    • git rebase master:会显示有merge冲突
    • git rebase –abort:用这种方式可以放弃
    • git rebase master:重新来一遍,还是显示merge冲突
    • vim master.txt:显示带有HEAD 和—–符号的文本,根据自己的想法删除一部分
    • git rebase –continue:提示要将修改的master放到暂存区
    • git add master.txt
    • git rebase –continue
    • git lol:这时候,master和test_rebase的commit都还在,但是已经变成线性的了
    • 再回到之前的不是线性的时候
    • git reflog:显示HEAD@{0-4}都是关于rebase的提交
    • git reset –hard HEAD@{5}:hard参数还原了暂存区和工作区
    • git lol:历史有回来了
    • //git reset –mixed:mixed只还原了暂存区
    • //git Reset –soft:什么都不还原,只是把HEAD和分支引用指向要指向的commit
    • 测试mixed
    • git reset –mixed HEAD~:测试一下mixed,mixed是reset默认的参数
    • git status:显示工作区和暂存区不同
    • git diff:查看不同
    • git lol:查看分支具体情况
    • git reflog -10:输出近10条的Head引用
    • git reset –hard HEAD@{1}
    • git lol:重新还原回来了
    • 测试soft
    • git reset –soft HEAD~
    • git status
    • git diff –cached:查看暂存区与历史区别

    相关设置

    命令补全

    • git config –:再按Tab键就可以给出可以使用的参数
    • 上面是Windows环境中的,直接可以补全
    • 在Mac os 和 Linux 中需要去github上下载源文件编译一下

    git config 给 命令 & 参数 起别名

    • git config –global alias.co checkout
    • git config –global alias.br branch
    • git config –global alias.st status
    • git config –global alias.ci commit
    • git c:再按Tab键就可以看到多了几个自己的别名,代表相应的命令
    • git log:经常用到的查看log日志的命令,加上oneline参数比较整洁
    • git config –global alias.lol “log –oneline”
    • git lol:起到了参数重命名的作用

    Git的基本工作流程

    • Git使用40个16进制字符的SHA-1 Hash来唯一标识对象 
      *例如:e98757d0598ab6eeaf1df0d87dd00826048bd80b
    • blob、tree、commit、tag

    配置级别

    • 三个级别system、global、local
    • local优先级最高,针对每一个仓库
    • 其次是global,针对当前的一个用户
    • 第一次启动是要输入(用户名和邮箱根据自己的实际情况更换)
    $ git config --global user.name "helloworld"
    $ git config --global user.email "352111644@qq.com"
    • 1
    • 2
    • 1
    • 2

    切换版本

    • which -a git
    • git –version
    • vim bash_profile 就在bash刚进去的目录下执行
    • 加上下面这句话,保存退出
    export PATH=/mingw64/bin/git:$PATH
    • 1
    • 1
    • 路径是前面的which -a git得到的
    • source .bashi_profile 重新加载
    • 再次执行 which -a git 查看
    • 这个只是切换版本,如果版本正确,则不用进行
  • 相关阅读:
    Jisa's Notebook
    前端常见跨域解决方案
    串口
    logging的使用
    Hexo
    优美的二维树状数组
    数据结构之树的基本概念
    js 监听ios手机键盘弹起和收起的事件
    jquery.qrcode.js生成二维码(前端生成二维码)
    js产生一个随机的字符串数字组合
  • 原文地址:https://www.cnblogs.com/ygjlch/p/6029954.html
Copyright © 2011-2022 走看看