zoukankan      html  css  js  c++  java
  • Git:本地仓库管理

    • git log:查看 commit 提交历史

    • git log --pretty=oneline:简化log输出内容

    • git reflog:查看每一次命令的历史记录


    版本回退

    • git reset HEAD/HEAD^/...:重置当前分支的HEAD为指定commit,同时重置暂存区,但工作区不变

    • git reset --hard HEAD/HEAD^/...:重置当前分支的HEAD为指定commit,同时重置暂存区和工作区

    • git reset --keep HEAD/HEAD^/...:重置当前分支的HEAD为指定commit,同时保持暂存区和工作区不变

    ┌────┐
    │HEAD│
    └────┘
       │
       │    ○ append GPL
       │    │
       └──> ○ add distributed
            │
            ○ wrote a readme file
    

    若要版本回退,首先Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

    每次commit用一串哈希值标识,选择时不需要填入全部,只要能区分就行

    $ git log --pretty=oneline
    1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
    e475afc93c209a690c39c13a46716e8fa000c366 add distributed
    eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
    
    $ git reset --hard HEAD^
    HEAD is now at e475afc add distributed
    
    $ git log --pretty=oneline
    e475afc93c209a690c39c13a46716e8fa000c366 add distributed
    eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
    

    最新的那个版本append GPL已经看不到了!


    版本回退之后的后悔药

    ┌────┐
    │HEAD│
    └────┘
       │
       └──>	○ commit id ???
       	|
        	○ add distributed
            │
            ○ wrote a readme file
    

    若要再回去:

    1. 未关机:直接翻看之前append GPL版本的commit id
    2. 重启了:git reflog用来记录了你的每一次命令
    $ git reset --hard 1094a
    HEAD is now at 83b0afe append GPL
    

    现在又回到append GPL版本了!


    检出

    checkout用于切换分支或恢复工作区,注意它会覆盖文件(危险)

    • git checkout:列出暂存区可以被检出的文件

    • git checkout file:从暂存区检出文件到工作区,覆盖工作区内容,但不清除暂存区

    • git checkout .:检出暂存区的所有文件到工作区

    • git checkout [HEAD/HEAD^ ... ] file:检出某个 commit 的指定文件到暂存区和工作区

    • git checkout [HEAD/HEAD^ ... ] .:检出某个 commit 的所有文件到暂存区和工作区


    示例:使用检出撤销修改

    ① 当修改没有添加到暂存区:

    1. 直接在工作区改回来
    2. 使用git checkout file丢弃工作区的修改(或已经添加到暂存区文件后又修改了没添加)

    ② 当修改已经添加到暂存区:

    1. 撤销暂存区的修改:git reset HEAD <file>git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。使用HEAD表示最新的版本。)

    2. 撤销修改后,再丢弃工作区的修改:git checkout file

    ③ 当修改已经提交到版本库,那就版本回退:

    $ git reset --hard HEAD^
    

    ④ 当修改已经推送到远程版本库:GG!


    移动和删除

    • git mv src dest:移动文件(移动到当前目录可用于改名)

    • git rm file:同时删除版本库和工作目录中的文件

    • git rm --cached file:从版本库中删除,但不删除工作目录中的文件

    以上改动后不需要add,但必须 commit 后才改动版本库内容


    示例:
    情景一:已从工作区中删除,且需要从版本库同步删除行为

    $ git rm/add test.txt
    rm 'test.txt'
    
    $ git commit -m "remove test.txt"
    [master d46f35e] remove test.txt
     1 file changed, 1 deletion(-)
     delete mode 100644 test.txt
    

    情景二:工作区中误删了,从版本库中恢复误删的文件(也就是撤销工作区的修改)

    git checkout -- test.txt
    

    情景三:同时删除版本库和工作区中的文件

    git rm .	est.txt
    git commit -m "delete test.txt"
    
  • 相关阅读:
    TypeScript
    monorepo
    Sass和Less
    浏览器的多进程
    React router的Route应用
    CSS3 之 Media(媒体查询器)
    迷失了自己~
    实现跨域的项目实践
    Python开发入门14天集训营-第二章
    Python开发入门14天集训营-第一章
  • 原文地址:https://www.cnblogs.com/bqzzz/p/14438658.html
Copyright © 2011-2022 走看看