美文网首页
Git开发必备指令

Git开发必备指令

作者: 天空蔚蓝依旧 | 来源:发表于2017-11-24 15:36 被阅读0次

    1、Linux基础指令

    cd .. //返回上级目录
    cd d: //进入d盘
    ls -al //查看文件列表
    cat dome.txt //查看文件
    touch dome.txt //创建文件
    rm dome.txt //删除文件
    vim 文件名 //编辑文件

    2、git的基本概念

    Workspace:工作区
    Index / Stage:暂存区(缓存区)
    Repository:仓库区(或本地仓库)
    Remote:远程仓库

    2.1 git 初始化

    git的初始化有两种,一种是还没有仓库自己新建,使用git init 初始化仓库;
    一种是已经有仓库了,通过git clone 拉取仓库到本地。

    git init //当前目录下初始一个仓库,多一个.git的隐藏文件夹
    git config --global user.name 'lisan' //配置本地仓库用户名
    git config --global user.email 'lisan@email.com' //配置本地仓库用户邮件
    或者
    git clone <path> //克隆gitcode
    git remote add [shortname] [url] //添加远程库

    例子:
    克隆远程仓库
     $ git clone git://github.com/schacon/grit.git
    关联远程仓库
     $ git remote add origin https://github.com/user/repo.git
    

    补充:config的几种作用域
    global 用户权限
    system 系统权限
    local 当前目录权限

    2.2、git基础指令-添加、提交、查看、删除、回退

    1、添加

    基本操作略...

    git add read.md //添加文件到缓存区
    git add . //该目录下所有文件添加到缓存区
    git add -a //项目内全部文件添加到缓存区

    2、提交

    基本操作略...

    git commit -m "mrak" //提交本地仓库
    git commit -am "mark" //提交本地仓库、与上面不同的是我们可以少了git add操作(只限于已经存在于缓存区的文件,也就是说如果你新建了个test文件,如果没git add,这里不会提交到仓库,还是老老实实add后commit。)
    git commit --amend //修改最后一次提交commit的msg

    3、查看

    基本操作略...

    git log -n 查看最近n次改动(常用)
    git log --oneline //简洁记录
    git log --graph //图形化显示commit
    git log --reverse --oneline //反向查看记录
    git log --oneline --graph //历史中出现了分支、合并
    git status //查看文件状态(常用)
    git status -s //查看状态 简洁模式

    4、删除

    基本操作略...

    git checkout read.md //回复工作区文件内容到仓库最新版本的文件内容
    git rm <file> //删除工作区内容
    git rm <file> --cached //删除缓存区内容,工作区不受影响(比如.gitignore配置是我们可能会用到这个功能)

    5、退回版本

    开发中难免会提交错commit、因此git为我们提供了撤销commit的方法。
    这里有个重点,没错就是HEAD,在使用git中我们常常会看到HEAD,那么HEAD到底是什么呢?我们知道在git中可能会有很多branch和commit,为了知道我们当前工作区提交到那个branch,所以需要个指针指向当前指向的branch的commit。HEAD可以简单理解成这个指针。(实际,HEAD指向的是当前分支,在每个分支上都有一个指针指向最新的commit,而HEAD始终是指向当前分支的指针,所以可以简单理解HEAD就是指针)


    主分支上的指针和HEAD

    git reset HEAD read.md //撤销添加到缓存区的内容
    git reset HEAD^ //回退一个commit
    git reset HEAD~3 //向上回退3个commit
    git reset commit_id //回退指定版本
    git reset 841125 //回到commit_id=841125的提交

    git reset 841125 和 git HEAD~3得到的结果是一样的
    第一个方法让git回退到841125的commit 也就是倒数第三个commit;
    第二个方法让指针(HEAD)回退3个节点(commit);
    需要注意的是reset后面还可以跟 --hard、--mixed、--soft等参数

    --mixed 影响仓库和暂存区 (reset HEAD and index)(默认值)
    --soft 影响仓库 (reset only HEAD)
    --hard 影响仓库、暂存区和工作区 (reset HEAD, index and working tree)
    当我们git reset后不跟参数、默认是--mixed,也就是只对暂存区和仓库进行回退。

    下面是最近三次的commit

    commit 676249486735497db288f6654c7295d13125ec56 (HEAD -> master, origin/master, origin/HEAD)
        最新commit
    
    commit 2d751a62100e2f5af58d35923c84d6f8bc98cd0b
        倒数第二commit
    
    commit 841125dc92f4929fa0fe5622cff1f93af4bebf02
        倒数第三commit
    
    

    2.4 本地分支

    1、 查看分支

    略略略...

    git branch //查看分支
    git remote -vv //查看远程分支
    git branch -a //查看本地和远程分支(所有分支)

    git branch -vv //查看本地分支关联远程分支,及最近的一次提交

    2、 创建、删除、切换

    略略略...

    git branch <分支name> //创建分支
    git branch -d <分支name> //删除分支
    git fetch -p //清理已经被删除的远程分支
    git checkout <分支name> //切换分支
    git checkout -b [分支名] [远程名]/[分支名] //切换并创建

    3、 合并

    每个需求新建一个分支开发,能很好的解决多个需求在一个分支里造成的混乱。
    多人合作开发,创建分支开发真的是用了都说好。所以不可避免的我们需要合并自己的分支和同事的分支。
    合并分支如果没有冲突,git里只是把指针指向了最新的commit。我们称之为fast-forward。
    如果有冲突,这需要解决冲突,然后提交分支。

    git merge <branch> //branch被合并到当前分支
    git rebase master <branch> # 将master rebase到branch

    merge和rebase都是合并分支,那么有什么区别呢?
    主要区别在于,merge会保留分支的真实信息,而rebase会把分支上的commit融合到当前分支上。
    直接放链接,解释的很清楚
    开发一般都用merge,当然你非要用rebase合并分支也可以。

    2.5、 远程分支

    终于到最最重要的部分了,没有远程的git是么有灵魂的。

    git pull # 抓取远程仓库所有分支更新并合并到本地
    git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并
    git fetch origin # 抓取远程仓库更新
    git merge origin/master # 将远程主分支合并到本地当前分支
    git push # 推送所有分支 (这个后面默认是 当前的分支对应的origin master)
    git push origin master # 将本地主分支推到远程主分支
    git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
    git push origin <local_branch> # 创建远程分支, origin是远程仓库名
    git push origin <local_branch>:<remote_branch> # 创建远程分支
    git push origin :<remote_branch> #先删除本地分支(git br -d <branch>),然后再push删除远程分支

    git pull实际上有两个步骤,拉取远程仓库和合并拉取的内容,等同于,git fetch origin(拉取) + git merge brName(合并)

    如果远程仓库创建了分支a,但是我们本地还没有分支a,所以我们先本地创建分支a,但是git push时你会发现,我们没有关联到远程分支无法推送,只是我么要用到git branch -u origin a这个方法本地分支a关联到远程分支a,之后我们就可以推送了。关联远程分支前别忘了先git pull,为啥?远程虽然新建了分支a,但是我们本地还不知道,所以需要git pull 获取远程的状态。可能有些乱,下面分解下1.git pull 获取远程信息 2. git checkout -b a 本地创建分支b 3. git branch -u origin a 关联远程分支a 4.git push 推送成功

    一般情况下,我们提交到远程仓库,只需要git push即可,但是有时可能出现下面这种情况本地分支a关联的是远程分支b,虽然很很少见。这时如果在使用git push会推送失败,我需要完整的写出git push origin b进行推送。

    4、 标签tag

    用于对发布版本进行标记,这是最常见的应用场景。

    git tag -a v1.0 添加标签
    git checkout tagname 切换到 tag code
    git log --oneline --decorate --graph 可以查看标签

    5、查看文件diff

    实际开发中,我基本没有用这个命令,还是在AS对比文件、解决冲突舒服。。。

    git diff 比较工作区和暂存区的文件差异
    git diff HEAD 比较工作区和仓库的文件差异
    git diff --cached 比较仓库和暂存区之间的差异git diff <file> # 比较当前文件和暂存区文件差异

    git diff --stat # 仅仅比较统计信息
    git diff <branch1>..<branch2> # 在两个分支之间比较
    git diff <id1><id2> # 比较两次提交之间的差异

    5、保存到隐藏区(常用)

    应用场景,假如在develop分支上我们正在开发分支,这是突然有个bug需要我们修复,但是我们又不能在develop分支上直接修改,这时需要我们切换到需要修复bug的那个分支上修复bug,假设这个分支是a。

    git stash 保存当前修改到stash中
    git stash save “message” 保存带msg的当前修改到stash中
    git stash list 查看stash中存储的列表
    git stash pop 从stash中提取出最新的保存到当前分支
    git stash pop stash@{1} 从stash中提取标记为@{1}的修改到本地
    git stash apply 回复工作区不删除stash内容,与pop不同的是不会删除stash区的内容
    git stash drop stash@{0} 删除stash内容(通常和apply配合使用)

    6、 其他

    应用场景:分支b中的一个commit_id=5689k的commit,分支a中没有这个id为5689k的commit,如果分支a需要这个commit的内容,如果一个一个复制也不失是一种办法,但是这样实在是有些低效率,所以git为我们提供了快捷的方法。
    git cherry-pick commit_id
    在分支a上 git cherry-pick 5689k 即可把5689k的commit内容合并到a分支上路了。

    git使用小技巧

    $ git checkout - 快速切换到上一个分支
    $ git config --global alias.co checkout //设置别名
    $ git config --global alias.br branch
    $ git config --global alias.ci commit
    $ git config --global alias.st status
    

    开发中用的命令基本总结完了,可能会有遗漏想起里会补充的,有什么错误欢迎大家指出。(* ̄︶ ̄)
    阮一峰大神的连接
    廖雪峰大神的连接

    相关文章

      网友评论

          本文标题:Git开发必备指令

          本文链接:https://www.haomeiwen.com/subject/orjzvxtx.html