常用的git命令整理

git init   

       初始化一个 Git 仓库(repository),即把当前所在目录变成 Git 可以管理的仓库。

git add

    文件            把文件添加到 暂存区(stage),可被 track 追踪纪录下来。可多次使用来添加多个文件。

    *                  添加所有修改到暂存区,效果同 git add all,待验证。

    .                   暂存新增加的和修改的文件,不包括已删除的文件。即当前目录下所有文件。

    -p                 暂存文件的一部分,会逐部分询问是否添加

git commit

    -m                   一次性把暂存区所有文件修改提交到仓库的当前分支。

    -am                 使用该命令,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交。相当于add+commit

    --amend          重新提交,覆盖上一次的提交。尤其适用于提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了的情况。

    -p                     commit 文件的一部分,会逐部分询问是否提交

git status 

      显示当前仓库的最新状态。

            提交之后,工作区就是“干净的”,即没有新的修改;

            有未提交文件时,分三个部分:

                1.在 stage 的,修改了的文件,即将被 commit

                2.没有 stage 的,修改了的文件,但被git track过的文件。

                3.新的还没有被git track过的文件。

git diff   

       查看工作区中的修改。

--staged                                          查看 暂存区中的修改。

<commit id1> <commit id2>         比较两次 commit 之间的差异。

<branch1> <branch2>                   在两个 branch 之间比较。

文件                                                 查看指定文件具体修改了哪些内容。

HEAD -- 文件                                   查看版本库最新版本和工作区之间的区别。就是查看自己pull以来修改了什么

git show   

       查看最后一个 commit 的修改。

git log 

       显示从最近到最远的提交日志

    -p                                 除显示基本信息之外,显示每次提交的内容差异

    -2                                 仅显示最近两次提交。

    -pretty=oneline           简化日志信息,将每个提交放在一行显示

git checkout -- 文件  丢弃工作区的修改,让该文件回到最近一次 git commit 或 git add 之后的状态。

    丢弃的范围包括

          1. 修改后还没有放到stage

          2. 添加到stage后又作了修改

git reset

    HEAD 文件                      把stage的修改撤销(unstage),回退到工作区。

    --hard                               重置所有文件到未修改的状态。

    --hard HEAD                    回退到某个版本版本(回退上个版本为:HEAD^, 上上个版本为HEAD^ ^,上100个版本为:HEAD-100)   

    <commit SHA>                重置到某个 commit。

    HEAD~1                            将当前 branch 重置为倒数第二个 commit (即丢弃最后一个 commit)。

git revert 

        revert实质是产生一个新的 commit,内容和要还原的 commit 完全相反。 比如,A commit 在 main.c 中增加了三行,revert A 产生的 commit 就会删除这三行。

    <commit id>  还原某个 commit。

    HEAD          还原到上次 commit。

git rm

    文件                            把文件从版本库和工作区中删除,不会再追踪到。

    -f 文件                         强制删除版本库和工作区中有修改的文件。

    --cached 文件             把文件从版本库中删除,但让文件保留在工作区且不被 Git 继续追踪(track)

git remote 

         查看已经配置的远程仓库服务器

    -v                                               显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。

    ls-remote <remote-name>       显示获得远程引用的完整列表。一般查看HEAD是哪个版本

    show <remote-name>              可以得到远程分支更为详细的信息以及 pull 和 push 相关提示信息。

    add <shortname> <url>           添加并关联一个远程库。其中,shortname用来代替整个 url。

git push   

         推送本地修改到 origin。

    -u origin master                                            关联后,使用该命令第一次推送 master 分支的所有内容

    origin 远程分支(通常是 master)               推送最新修改。

    rename old_name new_name                     重命名一个远程仓库的简写名。

    rm <remote-name>                                       移除一个远程仓库。

    origin --delete <remote branch name>       删除一个远程分支。

    origin --delete <branch name>                    在本地和远程同步删除分支。

git clone

    git@github.com:username/<repo name>.git      从远程库(origin)克隆一份到本地,仓库名同远程仓库名。

    https://github.com/username/repo name.git       作用同上。但不建议使用 https 协议

    <repo url> <folder name>                                      克隆一个仓库到指定文件夹。

    <repo url>                                                                克隆一个仓库到当前文件夹(应该是空的)。

git branch 

        列出本地当前所有分支,方便查看。当前分支前面会标有一个 * 号。

    -r                       查看远程分支列表。

    -a                      显示所有分支,包括本地和远程。

    -v                      查看每一次分支的最后一次提交。

    -vv                    查看设置的所有跟踪分支。将所有的本地分支列出来并且包含更多的信息

    --merged          查看所有已经被 merge 的 branch。

    --no-merged     查看所有还没被 merge 的 branch。

git checkout <branch name> 

       切换到该branch

    -b <branch name>     创建并切换到新的branch,相当于下面两条命令:git branch 分支 + git checkout 分支。

    -                                  切换到上一个 branch。

git merge <branch name> 

       合并指定branch到当前所在的分支。

    --no-ff -m "提交说明信息" <branch name>    用普通模式合并

                参数 –no-ff 表示 禁用Fast forward快进模式, 快进模式看不出来曾经做过合并,而普通模式可以

    -d <branch name>                                          普通删除分支。一般情况下,先合并完分支,然后再删除,否则会删除失败

    -D <branch name>                                          强行删除分支

git rebase <target branch name>(通常是 master)   

       在本地 master 上进行变基操作。

          注意:merge 与 rebase 都是整合来自不同分支的修改。

              merge 会把两个分支的最新快照以及二者最近的共同祖先进行三方合并,合并的结果是生成一个新的快照(并提交)。

              rebase 会把提交到某一分支(当前分支)上的所有修改都转移至另一分支(目标分支)上,就好像“重新播放”一样。

          变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起。

         简言之:这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。

    –ongo 目标分支 第一分支 第二分支:选中在第二分支里但不在第一分支里的修改,将它们在目标分支(通常是 master)上重演。

git stash 

把当前分支的工作现场储存起来,等以后恢复现场后继续工作。一般适用于还没有 commit 的分支代码。

    list            查看储存的工作现场纪录列表。

    apply        恢复最近 stash 过的工作现场

    drop         删除储存的工作现场

    pop          相当于上面两条命令,恢复回到工作现场的同时把 stash 内容也删除了

    clear        清空所有暂存区的 stash 纪录

git push origin <branch name>                                 

       把该分支上的所有本地提交推送到远程库对应的远程分支上。

git checkout <branch name> origin/<branch name> 

       如果远程有某一个分支而本地没有,把远程的这个分支迁到本地。

git checkout -b <branch name> origin/<branch name>            

       把远程分支迁到本地顺便切换到该分支。

git pull                                                       

        抓取远程库最新提交,拉取并合并。

git fetch                                                    

         没有 merge 的 pull。

git branch --set-upstream <branch name> origin/<branch name>  

        建立本地分支和远程分支的关联。

git submodule update --recursive                               

        第三方依赖与远程同步,还可以在最后添加 -f 参数。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354