您的位置:首页 > 其它

Git 本地操作

2016-01-02 23:33 381 查看
官方下载网站

官方文档

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 可以分解为

mv a c:在自己的工作目录下将a重命名为c

git status

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 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 "352111644@qq.com"


切换版本

which -a git

git –version

vim bash_profile 就在bash刚进去的目录下执行

加上下面这句话,保存退出

export PATH=/mingw64/bin/git:$PATH


路径是前面的which -a git得到的

source .bashi_profile 重新加载

再次执行 which -a git 查看

这个只是切换版本,如果版本正确,则不用进行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: