# # git命令

配置ssh

    ssh-keygen -t rsa -b 4096 -C "****@****.****"

1

添加远程仓库

    git remote add origin git@github.com:seamong/gitbook
    git push -u origin master

1
2

本地创建远程分支

    git push origin <本地分支>:<远程分支>

1

本地删除远程分支

    git push origin :<远程分支>

1

本地分支绑定远程分支

    git branch --set-upstream-to=origin/<远程分支> <本地分支>

1

创建本地分支

    git checkout -b <本地分支>

1

删除本地分支

    git branch -D <本地分支>

1

添加远程仓库

    git remote add origin https://github.com/**/**.git
    git push -u origin master

1
2

回退一次版本(强制)

    git reset --hard HEAD^

1

提交代码出现错误时，解决办法

    git add .
    # 订单以及地址样式修改
    git commit -m ""  //[test 4dffb5e] index
    git push origin test

1
2
3
4

强制更新

    git pull -f origin test  //该命令  无视本地文件修改.直接将远程仓库的代码覆盖本地文件

1

#### # 删除历史记录中文件

原文
寻找大文件的ID

    git rev-list --objects --all\
     | grep "$(git verify-pack -v .git/objects/pack/*.idx\
      | sort -k 3 -n | tail -5 | awk '{print$1}')"

1
2
3

    $ git rev-list --objects --all\
     | grep "$(git verify-pack -v .git/objects/pack/*.idx\
      | sort -k 3 -n | tail -5 | awk '{print$1}')"
    f846f156d16f74243b67e3dabec58a3128744352
    4a1546e732b2e2a352b7bf220c1a22ad859abf89
    f72d04efe6d0b41b067f9fbbc62455f28d3670d2
    49bdf300ddf57d1946bc9c6570d94a38ac9d6a50
    9c073d4177af5d2e43ada41f92efb18d9462a536

1
2
3
4
5
6
7
8

文件名与ID映射

    $ git rev-list --objects --all
    c252878ac09a3979a80520b82a71dc2dae4529f9
    7bc7d05c6097063f531580ba4c32921464a6c456 _drafts
    dcce26ed53fbb869dc7d5b71742d2f9e523bfe42 _layouts
    414186c794a0d58695abb75c548bdbfec1de2763 _layouts/default.html
    1934eeffe3d242375510dff28cffa6de6b3de367 _layouts/post.html
    5f14647875f2177a6d37b8bfbcdb4629af595b64 _posts
    6cdbb293d453ced07e6a07e0aa6e580e6a5538f4 _posts/2013-10-12-2.md

1
2
3
4
5
6
7
8

得到文件名列表

    $ git rev-list --objects --all\
     | grep "$(git verify-pack -v .git/objects/pack/*.idx\
      | sort -k 3 -n | tail -5 | awk '{print$1}')"
    f846f156d16f74243b67e3dabec58a3128744352 assets/img/recent-badge.psd
    4a1546e732b2e2a352b7bf220c1a22ad859abf89 assets/img/album/me/IMG_0276.JPG
    f72d04efe6d0b41b067f9fbbc62455f28d3670d2 assets/img/album/me/IMG_0389.JPG
    49bdf300ddf57d1946bc9c6570d94a38ac9d6a50 assets/img/album/me/IMG_0813.JPG
    9c073d4177af5d2e43ada41f92efb18d9462a536 assets/img/album/me/IMG_0891.JPG

1
2
3
4
5
6
7
8

删除所有大文件

    git filter-branch -f --prune-empty --index-filter\
     "git rm -rf --cached --ignore-unmatch `[需要删除的文件的相对路径+文件名]`"\
      --tag-name-filter cat -- --all

1
2
3

同步远程仓库

    git push origin --force --all

1

#### # or

删除指定文件

    # 语法
    git filter-branch --force --index-filter\
     'git rm -rf --cached --ignore-unmatch [需要删除的文件的相对路径+文件名]'\
      --prune-empty --tag-name-filter cat -- --all
    # 实例
    git filter-branch --force --index-filter\
     'git rm -rf --cached --ignore-unmatch seaver/input.txt'\
      --prune-empty --tag-name-filter cat -- --all

1
2
3
4
5
6
7
8

同步远程仓库

    git push origin master --force\
     && rm -rf .git/refs/original/\
      && git reflog expire --expire=now --all\
       && git gc --prune=now

1
2
3
4

## # 创建新的分支,并推送到远程分支

通过一个示例来展示这个步骤:
以下内容取自`chengweiyang`的GitBook 简明教程
,我也做了一些调整和注释.

### # 创建 gh-pages 分支

执行如下命令来创建分支，并且删除不需要的文件：

    # 下面这段命令中`--orphan`指创建一个没有任何提交历史的分支
    $ git checkout --orphan gh-pages
    # 在暂存区或分支中,删除当前目录中的所有文件,并在本地文件系统中保留这些文件
    $ git rm --cached -r .
    # -f表示文件-d表示目录 ,清理`workspace`中未被`git`版本控制的文件
    $ git clean -df

1
2
3
4
5
6

现在，目录下应该只剩下 _book 目录了，首先，忽略一些文件：

    # 创建`.gitignore`文件,并写入`*~`
    $ echo "*~" > .gitignore
    # 在`.gitignore`中添加`_book`
    $ echo "_book" >> .gitignore
    # 将`.gitignore`文件添加到暂存区中,并对其做出跟踪
    $ git add .gitignore
    #　通过`commit`创建一个当前分支的一个快照(新最追踪的文件和做了修改的文件),
    # 并给这个快照按照一定的格式或者是`angular`的规范,添加注释.
    $ git commit -m "Ignore some files"

1
2
3
4
5
6
7
8
9

然后，加入 _book 下的内容到分支中：

    # 使用命令移动`_book`目录中的所有文件和文件夹 到当前目录中
    $ cp -r _book/* .
    # 将当前目录中的所有文件和文件夹都存到暂存区中
    $ git add .
    # 创建分支快照
    $ git commit -m "Publish book"

1
2
3
4
5
6

### # 上传书籍内容到 GitHub

现在，可以将编译好的书籍内容上传到 GitHub 中 test 项目的 gh-pages 分支了，虽然这里还没有创建分支，上传和创建会一步完成！

    # `-u`给当前分支指定默认主机.`push`:将本地分支的更新，推送到远程主机。
    $ git push -u origin gh-pages
    Counting objects: 49, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (45/45), done.
    Writing objects: 100% (49/49), 1.34 MiB | 131.00 KiB/s, done.
    Total 49 (delta 5), reused 0 (delta 0)
    To https://github.com/USERNAME/REPO.git
     * [new branch]      gh-pages -> gh-pages
    Branch gh-pages set up to track remote branch gh-pages from github.

1
2
3
4
5
6
7
8
9
10