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 “[email protected]
  • 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
  • Git 本地操作_第1张图片
  • 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
  • git add .:放到暂存区
  • git commit -m “Initial commit on master”:提交进历史记录
  • vim master.txt:在刚才的基础上添加
Second commit on master
  • git add .
  • git commit -m “Second commit on master”
  • git branch test:产生新的分支
  • git checkout test:切换到新的分支
  • vim master.txt:在test分支上继续添加
Initial commit on test
  • 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 "[email protected]"

切换版本

  • which -a git
  • git –version
  • vim bash_profile 就在bash刚进去的目录下执行
  • 加上下面这句话,保存退出
export PATH=/mingw64/bin/git:$PATH
  • 路径是前面的which -a git得到的
  • source .bashi_profile 重新加载
  • 再次执行 which -a git 查看
  • 这个只是切换版本,如果版本正确,则不用进行

你可能感兴趣的:(Git)