zoukankan      html  css  js  c++  java
  • git的使用教程

     

    创建公开密钥认证所需的 SSH Key,

    并将其添加至 GitHub

    ssh-keygen -t rsa -C "your_email@example.com"

    id_rsa 文件是私有密钥,id_rsa.pub 是公开密钥。

    Key 部分请粘贴 id_rsa.pub 文件里的内容。id_rsa.pub
    的内容可以用如下方法查看。
    $ cat 你的路径/id_rsa.pub

    ssh-rsa 你的公有秘钥 xyyhqq@gmail.com

    复制这里的全部 ssh到 .com 全部字符 到github的ssh秘钥部分

    初始化仓库

     git init

    查看仓库的状态

     git status

    向暂存区中添加文件

    git add

    保存仓库的历史记录

    git commit

    记述一行提交信息

    $ git commit -m "First commit"

    记述详细提交信息

    刚才我们只简洁地记述了一行提交信息,如果想要记述得更加详
    细,请不加 -m,直接执行 git commit命令。执行后编辑器就会启
    动,并显示如下结果。
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # On branch master
    #
    # Initial commit

    查看提交后的状态

    git status

    查看提交日志

     git log

    只显示提交信息的第一行

    git log --pretty=short

    只显示指定目录、文件的日志

    git log README.md

    显示文件的改动

    $ git log -p

    比如,执行下面的命令,就可以只查看 README.md 文件的提交日
    志以及提交前后的差别。
    $ git log -p README.md

    查看更改前后的差别

    git diff

    查看工作树和暂存区的差别

    执行 git diff命令,查看当前工作树与暂存区的差别。
    $ git diff
    diff --git a/README.md b/README.md
    index e69de29..cb5dc9f 100644
    --- a/README.md
    +++ b/README.md
    @@ -0,0 +1 @@
    +# Git教程

    查看工作树和最新提交的差别

    $ git diff HEAD
    diff --git a/README.md b/README.md
    index e69de29..cb5dc9f 100644
    --- a/README.md
    +++ b/README.md
    @@ -0,0 +1 @@
    +# Git教程

    显示分支一览表

    git branch

    创建、切换分支

    git checkout  - b 

    切换到 feature - A 分支并进行提交

    $ git checkout -b feature-A
    Switched to a new branch 'feature-A'

    $ git branch feature-A
    $ git checkout feature-A

    切换到 master 分支

    现在我们再来看一看 master 分支有没有受到影响。首先切换至
    master 分支。
    $ git checkout master
    Switched to branch 'master'

    切换回上一个分支

    现在,我们再切换回 feature-A 分支。
    $ git checkout -
    Switched to branch 'feature-A'

    合并分支

    git merge

    接下来,我们假设 feature-A 已经实现完毕,想要将它合并到主干分
    支 master 中。首先切换到 master 分支。
    $ git checkout master
    Switched to branch 'master'

    然后合并 feature-A 分支。为了在历史记录中明确记录下本次分支合
    并,我们需要创建合并提交。因此,在合并时加上 --no-ff参数

    git merge --no-ff feature-A

    默认信息中已经包含了是从 feature-A 分支合并过来的相关内容,所
    以可不必做任何更改。将编辑器中显示的内容保存,关闭编辑器,然后
    图灵社区会员 lxghost2 专享 尊重版权

    就会看到下面的结果。
    Merge made by the 'recursive' strategy.
    README.md | 2 ++
    1 file changed, 2 insertions(+)

    git log  -- graph——以图表形式查看分支

    git reset——回溯历史版本

    回溯到创建 feature - A 分支前

    让我们先回溯到上一节 feature-A 分支创建之前,创建一个名为
    fix-B 的特性分支。
    要让仓库的 HEAD、暂存区、当前工作树回溯到指定状态,需要用
    到 git rest --hard命令。只要提供目标时间点的哈希值

    完全恢复至该时间点的状态。事不宜迟,让我们执行下面的命令。
    $ git reset --hard fd0cbf0d4a25f747230694d95cac1be72d33441d
    HEAD is now at fd0cbf0 Add index

    创建 fix - B 分支

    现在我们来创建特性分支(fix-B)。
    $ git checkout -b fix-B
    Switched to a new branch 'fix-B'

    作为这个主题的作业内容,我们在 README.md 文件中添加一行
    文字。
    # Git教程
    - fix-B
    然后直接提交 README.md 文件。
    $ git add README.md
    $ git commit -m "Fix B"
    [fix-B 4096d9e] Fix B
    1 file changed, 2 insertions(+)
    现在的状态如图 4.5 所示。接下来我们的目标是图 4.6 中所示的状
    态,即主干分支合并 feature-A 分支的修改后,又合并了 fix-B 的修改

    推进至 feature - A 分支合并后的状态

    git log命令只能查看以当前状态为终点的历史日志。所以这里
    要使用 git reflog命令,查看当前仓库的操作日志。在日志中找出
    回溯历史之前的哈希值,通过 git reset --hard命令恢复到回溯历
    史前的状态。

    首先执行 git reflog 命令,查看当前仓库执行过的操作的日志。

    $ git reflog
    4096d9e HEAD@{0}: commit: Fix B
    fd0cbf0 HEAD@{1}: checkout: moving from master to fix-B
    fd0cbf0 HEAD@{2}: reset: moving to fd0cbf0d4a25f747230694d95cac1be72d33441d
    83b0b94 HEAD@{3}: merge feature-A: Merge made by the 'recursive' strategy.
    fd0cbf0 HEAD@{4}: checkout: moving from feature-A to master
    8a6c8b9 HEAD@{5}: checkout: moving from master to feature-A
    fd0cbf0 HEAD@{6}: checkout: moving from feature-A to master
    8a6c8b9 HEAD@{7}: commit: Add feature-A
    fd0cbf0 HEAD@{8}: checkout: moving from master to feature-A
    fd0cbf0 HEAD@{9}: commit: Add index
    9f129ba HEAD@{10}: commit (initial): First commit

    $ git checkout master


    $ git reset --hard 83b0b94
    HEAD is now at 83b0b94 Merge branch 'feature-A'

     消除冲突

    $ git merge --no-ff fix-B
    Auto-merging README.md
    CONFLICT (content): Merge conflict in README.md
    Recorded preimage for 'README.md'
    Automatic merge failed; fix conflicts and then commit the result.

    查看冲突部分并将其解决

    用编辑器打开 README.md 文件,就会发现其内容变成了下面这个
    样子。

    Git教程
    <<<<<<< HEAD
    - feature-A
    =======
    - fix-B
    >>>>>>> fix-B

    ======= 以上的部分是当前 HEAD 的内容,以下的部分是要合并
    的 fix-B 分支中的内容。我们在编辑器中将其改成想要的样子。
    # Git教程
    - feature-A
    - fix-B

    如上所示,本次修正让 feature-A 与 fix-B 的内容并存于文件之中。
    但是在实际的软件开发中,往往需要删除其中之一,所以各位在处理冲
    突时,务必要仔细分析冲突部分的内容后再行修改

    提交解决后的结果

    冲突解决后,执行 git add命令与 git commit命令

    $ git add README.md


    $ git commit -m "Fix conflict"
    Recorded resolution for 'README.md'.
    [master 6a97e48] Fix conflict

    git commit  -- amend——修改提交信息

    git rebase  - i——压缩历史

    创建 feature - C 分支

    首先,新建一个 feature-C 特性分支。

    $ git checkout -b feature-C
    Switched to a new branch 'feature-C'

    提交这部分内容。这个小小的变更就没必要先执行 git add命令再

    执行 git commit命令了,

    我们用

    git commit -am命令

    来一次完成这两步操作。
    $ git commit -am "Add feature-C"
    [feature-C 7a34294] Add feature-C
    1 file changed, 1 insertion(+)

    修正拼写错误

    现在来修正刚才预留的拼写错误。请各位自行修正 README.md 文
    件的内容,修正后的差别如下所示。

    $ git diff
    diff --git a/README.md b/README.md
    index ad19aba..af647fd 100644
    --- a/README.md
    +++ b/README.md
    @@ -2,4 +2,4 @@
    - feature-A
    - fix-B
    - - faeture-C
    + - feature-C


    然后进行提交。


    $ git commit -am "Fix typo"
    [feature-C 6fba227] Fix typo
    1 file changed, 1 insertion(+), 1 deletion(-)

    更改历史

    因此,我们来更改历史。将 "Fix typo"修正的内容与之前一次的
    提交合并,在历史记录中合并为一次完美的提交。为此,我们要用到
    git rebase命令。
    $ git rebase -i HEAD~2

    合并至 master 分支

    在 GitHub 上新建一个仓库。

    为防止与其他仓
    库混淆,仓库名请与本地仓库保持一致,即 git-tutorial。创建时请不要
    勾选 Initialize this repository with a README 选项(图 4.8)。因为一旦勾
    选该选项,GitHub 一侧的仓库就会自动生成 README 文件,从创建之
    初便与本地仓库失去了整合性。虽然到时也可以强制覆盖,但为防止这
    一情况发生还是建议不要勾选该选项,直接点击 Create repository 创建
    仓库。

    git remote add——添加远程仓库

    在 GitHub 上创建的仓库路径为“git@github.com:用户名 /
    git-tutorial.git”。现在我们用 git remote add命令将它设置
    成本地仓库的远程仓库
    A 。
    $ git remote add origin git@github.com:github-book/git-tutorial.git
    按照上述格式执行 git remote add命令之后,Git 会自动将
    git@github.com:github-book/git-tutorial.git远程仓库的
    名称设置为 origin(标识符)。

    git push——推送至远程仓库 

    推送至 master 分支
    如果想将当前分支下本地仓库中的内容推送给远程仓库,需要用到
    git push命令。现在假定我们在 master 分支下进行操作。
    $ git push -u origin master
    Counting objects: 20, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (10/10), done.
    Writing objects: 100% (20/20), 1.60 KiB, done.
    Total 20 (delta 3), reused 0 (delta 0)
    To git@github.com:github-book/git-tutorial.git
    * [new branch] master -> master
    Branch master set up to track remote branch master from origin.

    推送至 master 以外的分支

    除了 master 分支之外,远程仓库也可以创建其他分支。举个例子,我
    们在本地仓库中创建 feature-D 分支,并将它以同名形式 push 至远程仓库。
    $ git checkout -b feature-D
    Switched to a new branch 'feature-D'

    我们在本地仓库中创建了 feature-D 分支,现在将它 push

    给远程仓库并保持分支名称不变。
    $ git push -u origin feature-D
    Total 0 (delta 0), reused 0 (delta 0)
    To git@github.com:github-book/git-tutorial.git
    * [new branch] feature-D -> feature-D
    Branch feature-D set up to track remote branch feature-D from origin.

    git clone——获取远程仓库

    首先我们换到其他目录下,将 GitHub 上的仓库 clone 到本地。注意


    不要与之前操作的仓库在同一目录下。
    $ git clone git@github.com:github-book/git-tutorial.git
    Cloning into 'git-tutorial'...
    remote: Counting objects: 20, done.
    remote: Compressing objects: 100% (7/7), done.
    remote: Total 20 (delta 3), reused 20 (delta 3)
    Receiving objects: 100% (20/20), done.
    Resolving deltas: 100% (3/3), done.
    $ cd git-tutorial

    执行 git clone命令后我们会默认处于 master 分支下,同时系统
    会自动将 origin 设置成该远程仓库的标识符。也就是说,当前本地仓库
    的 master 分支与 GitHub 端远程仓库(origin)的 master 分支在内容上是
    完全相同的。
    $ git branch -a
    * master
    remotes/origin/HEAD -> origin/master
    remotes/origin/feature-D
    remotes/origin/master

    获取远程的 feature - D 分支

    我们试着将 feature-D 分支获取至本地仓库。
    $ git checkout -b feature-D origin/feature-D
    Branch feature-D set up to track remote branch feature-D from origin.
    Switched to a new branch 'feature-D'

    向本地的 feature - D 分支提交更改


    现在假定我们是另一名开发者,要做一个新的提交。在 README.
    md 文件中添加一行文字,查看更改。
    $ git diff
    diff --git a/README.md b/README.md
    index af647fd..30378c9 100644
    --- a/README.md
    +++ b/README.md
    @@ -3,3 +3,4 @@
    - feature-A
    - fix-B
    - feature-C
    + - feature-D

    向本地的 feature - D 分支提交更改


    现在假定我们是另一名开发者,要做一个新的提交。在 README.
    md 文件中添加一行文字,查看更改。
    $ git diff
    diff --git a/README.md b/README.md
    index af647fd..30378c9 100644
    --- a/README.md
    +++ b/README.md
    @@ -3,3 +3,4 @@
    - feature-A
    - fix-B
    - feature-C
    + - feature-D

    按照之前学过的方式提交即可。
    $ git commit -am "Add feature-D"
    [feature-D ed9721e] Add feature-D
    1 file changed, 1 insertion(+)

    推送 feature - D 分支

    现在来推送 feature-D 分支。
    $ git push
    Counting objects: 5, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 281 bytes, done.
    Total 3 (delta 1), reused 0 (delta 0)
    To git@github.com:github-book/git-tutorial.git
    ca0f98b..ed9721e feature-D -> feature-D

    git pull——获取最新的远程仓库分支


    现在我们放下刚刚操作的目录,回到原先的那个目录下。这边的本
    地仓库中只创建了 feature-D 分支,并没有在 feature-D 分支中进行任何
    图灵社区会员 lxghost2 专享 尊重版权
    68   第 4 章 通过实际操作学习 Git
    提交。然而远程仓库的 feature-D 分支中已经有了我们刚刚推送的提交。
    这时我们就可以使用 git pull 命令,将本地的 feature-D 分支更新到最新
    状态。当前分支为 feature-D 分支。
    $ git pull origin feature-D
    remote: Counting objects: 5, done.
    remote: Compressing objects: 100% (1/1), done.
    remote: Total 3 (delta 1), reused 3 (delta 1)
    Unpacking objects: 100% (3/3), done.
    From github.com:github-book/git-tutorial
    * branch feature-D -> FETCH_HEAD
    First, rewinding head to replay your work on top of it...
    Fast-forwarded feature-D to ed9721e686f8c588e55ec6b8071b669f411486b8.

  • 相关阅读:
    dex文件格式三
    神庙逃亡破解分析
    MySQL优化
    Redis AOF和RDB
    KD树
    关系型和非关系型数据库
    数据库实现分布式锁
    单点登录
    数据库树形结构查询
    层次遍历递归和非递归方法
  • 原文地址:https://www.cnblogs.com/xyyhcn/p/11672377.html
Copyright © 2011-2022 走看看