git常用命令

git太强大了,记录所有的工作记录,帮助理清思维软件现在已经很多,但是优秀并不多,为什么刚入研究生的时候没用,每次一想到相关东西,就觉得本科浪费了太多的时间,也没办法,成长总是要花费代价的,

这里都是临时学习的一些git命令,强行记住的,很多概念和逻辑都没有统一,自己总是有这种习惯不喜欢没有整体逻辑的东西,这总是导致我处理问题的时候要慢很多,也许我该改改

1>

获得帮助可以使用类似man git-****的命令格式:
想获得关于commit命令的帮助,则man git-commit
想获得关于pull命令的帮助,则man git-pull
想获得关于merge命令的帮助,则man git-merge
以此类推
2>
任何人在使用git之前,都要提交简单的个人信息,以便git区分不同的提交者身份。
#git config --global user.name “your name”
#git config --global user.email yourname@example.com
3>
想新开启一个项目,应该先建立一个目录,例如名为myproject,然后所有的项目开发内容都在此目录下进行。
#cd myproject
#git init
//git add的作用就是创建一个blob文件来记录最新的修改代码,并且在index file里添加一个到此blob
//而git ls-files --stage  //一定要记住,此命令是用于查看index file的!!(也就是暂存区)
#git add .   //将当前目录下修改加入到index file(暂存区)
#git commit -m "your world" 将index file(暂存区修改加入到仓库)
至此,一个新项目就诞生了,第一个开发信息(开发日志)也随之诞生。
4>
如果改进了项目源代码,并且到了开发者认为“应该再次记录开发信息”的时候,则提交“工作成果”。
#git commit -a  //这是一个偷懒的命令,相当于git add .; git commit;
但是,此处有一点应该注意,那就是git commit -a无法把新增文件或文件夹加入进来,所以,如果你新增了文件或文
件夹,那么就要老老实实的先git add .,再git commit喽。[此处非常感谢freeren  的提醒]
5>
想检查到目前为止对源码都做了哪些修改(相对于本次工作刚开始之时):
#git diff //比较index file(暂存区)和工作区的区别
#git diff –cached //比较index file(暂存区)和仓库的区别
#git diff HEAD //比较工作区和仓库的区别
#git status  //总结以上3个命令的区别
6>
想查看自项目开启到现在的所有开发日志
#git log
#git log -p //会输出非常详细的日志内容,包括了每次都做了哪些源码的修改
7>
开启一个试验分支(experimental),如果分支开发成功则合并到主分支(master),否则放弃该试验分支。
#git branch experimental //创建一个试验分支,名称叫experimental
#git branch //显示当前都有哪些分支,其中标注*为当前所在分支
#git checkout experimental //转移到experimental分支
(省略数小时在此分支上的开发过程)…
如果分支开发成功:
#git commit -a //在experimental分支改进完代码之后用commit在此分支中进行提交
#git checkout master //转移回master分支
#git merge experimental //经证实分支开发成功,将exerimental分支合并到主分支
#git commit -a //彻底完成此次分支合并,即提交master分支
#git branch -d experimental //因为experimental分支已提交,所以可安全删除此分支
如果分支开发失败:
#git checkout master
#git branch -D experimental //由于分支被证明失败,因此使用-D来放弃并删除该分支
8>
随时查看图形化分支信息。
#gitk
9>
当合作伙伴bob希望改进我(rocrocket)的工作成果,则:
bob$git clone /home/rocrocket/project myrepo //此命令用于克隆我的工作到bob的myrepo目录下。请注意,此命令有可能会
因为/home/rocrocket的目录权限问题而被拒绝,解决方法是chmod o+rx /home/rocrocket。
(省略bob数小时的开发过程)…
bob$git commit -a //bob提交自己的改进成果到自己的git仓库中,并口头告知我(rocrocket)他已经完成了工作。
我如果非常非常信任bob的开发能力:
$ cd /home/rocrocket/project
$ git pull /home/bob/myrepo //pull命令的意思是从远端git仓库中取出(git-fetch)修改的代码,然后合并(git-merge)到我
(rocrocket)的项目中去。读者要记住一个小技巧,那就是“git pull .”命令,它和git merge的功能是一样的,以后完全可以用
git pull .来代替git merge哦!请注意,git-pull命令有可能会因为/home/bob的目录权限问题而被拒绝,解决方法是chmod o+rx 
/home/bob。
如果我不是很信任bob的开发能力:
$ cd /home/rocrocket/project
$ git fetch /home/bob/myrepo master:bobworks //此命令意思是提取出bob修改的代码内容,然后放到我(rocrocket)工作
目录下的bobworks分支中。之所以要放到分支中,而不是master中,就是要我先仔仔细细看看bob的开发成果,如果我觉得满意,我再
merge到master中,如果不满意,我完全可以直接git branch -D掉。
$git whatchanged -p master..bobworks //用来查看bob都做了什么
$git checkout master //切换到master分区
$git pull . bobworks //如果我检查了bob的工作后很满意,就可以用pull来将bobworks分支合并到我的项目中了
$git branch -D bobworks //如果我检查了bob的工作后很不满意,就可以用-D来放弃这个分支就可以了
过了几天,bob如果想继续帮助我开发,他需要先同步一下我这几天的工作成果,只要在其当初clone的myrepo目录
下执行git pull即可:
#git pull //不用加任何参数,因为当初clone的时候,git已经记住了我(rocrocket)的工作目录,它会直接找到我的目录来取。
10>git reset的几种使用
--hard:置换暂存区;置换工作区。
--soft: 不置换暂存区,不置换工作区,仅仅做仓库恢复工作。
-mixed: 置换暂存区,不置换工作区 (默认模式)
       如git reset --hard HEAD^
      #git reset HEAD hello.txt这仅仅只是恢复特定的文件,HEAD也可以改为HEAD^等其他commit版本
11>git cat-file -t  ID   如果是tree则可用git ls-tree ID来查看tree内容
12>git cat -file type ID(type是git cat-file -t  ID 查出来的类型,如commit、blob、tree等)tree对象可能包含更多的tree对象和文件对象(blob)就想目录树一样)
13>git tag tagname ID(给特定的ID,一般是commit ID建立一个别名)
14>git branch branchname ID //这个ID事commit ID,命令是基于特定的ID版本建立一个分支,git branch可以查看当前有哪些分支
15> git log V3..V7 //显示V3之后直至V7的所有历史记录
git log V3.. //显示所有V3之后的历史记录。注意<since>..<until>中任何一个被省略都将被默认设置为HEAD。所以如果使用..<until>的话,git log在大部分情况下会输出空的。
git log –since=”2 weeks ago” //显示2周前到现在的所有历史记录。具体语法可查询
git-ref-parse命令的帮助文件。
git log stable..experimental //将显示在experimental分支但不在stable分支的历史记录
git log experimental..stable //将显示在stable分支但不在experimental分支的历史记录
16>git reflog是显示最近几次的操作记录,git提供了操作恢复机制,git reflog show branch显示对特定分支的操作,git reset expr@{1},expr@{1}是通过git reflog show branch命令显示出的曾今操作记录,如果太多了可以使用git reflog show branch |head -5 ,显示前5条记录,head是shell 命令与GIT无关,直接使用git reflog 可以查看所有分支的操作
17>相对于git reset,git checkout最大的特点就是不会改变HEAD游标,中文意义是检出,从哪里检出到哪里,如默认从indexfile检出到workspace,或者可以指定从某个commit检出到workspace
    git checkout . 将暂存区的内容恢复到工作区(不是覆盖关系(这里表示的覆盖关系可以用重定位符号">"表达),而是添加关系等同于">>"),加入工作区中新建立了某个文件xxx.txt,而没有git add,那么使用git checkout .是无法删除这个文件的,因为是添加关系),如果只想恢复某个文件可以,git checkout filename,注意可以使用git ls-files --stage 查看暂存区index file有哪些,
      git checkout可以指定从哪个地方开始检出,默认是从暂存区进行检出,git checkout HEAD . 或者可以指定具体的文件,git checkout HEAD filename再例如git checkout master~2  filename,这是检出上两个版本的filename,从仓库的commit HEAD检出(>>),
18>实际上git reset则不同,它所有的选项都是置换关系,也就是覆盖关系>,但是对于没有添加进入indexfile的工作区文件则无法覆盖,也就是无法删除
19>git add .只能将修改的文件对暂存区更新,但是无法更新删除的文件或者文件夹,要在暂存区中删除文件或者目录必须使用git rm filename/dentryname
20>如果你刚刚git add了一个文件到index file里,但是你突然发现这是错误的,那么就要用到git reset  --  filename,这不会影响工作区的文件。注意如果你没有删除文件filename,你使用git rm filename 是无法从index file里面删除的,除非是用-f选项,但是这样也会删除工作区的文件
21>HEAD~5表示HEAD^^^^^
22>git diff也只能查出在index file里有记录的文件
23>最后总结一点,无论是git checkout还是git reset都必须要在indexfile中或者仓库中有记录才可以进行恢复检出等操作,否则不会影响工作区
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值