zoukankan      html  css  js  c++  java
  • [原创]git使用入门

    创建git项目并初始化

    建立一个新文件夹,然后将该文件夹定义为git项目 

    Lilis-MacBook-Pro:GitDir lili$ mkdir testgit
    Lilis-MacBook-Pro:GitDir lili$ cd testgit
    Lilis-MacBook-Pro:testgit lili$ git init
    Initialized empty Git repository in /Users/lili/快盘/GitDir/testgit/.git/

    为新项目添加文件和内容

    Lilis-MacBook-Pro:testgit lili$ echo "test git" > README
    Lilis-MacBook-Pro:testgit lili$ LS
    README
    Lilis-MacBook-Pro:testgit lili$ cat README
    test git

    新的内容都是存储在暂存区中,只有提交了才会存储于Git目录中。

    提交修改和新建内容

    Lilis-MacBook-Pro:testgit lili$ git add README
    Lilis-MacBook-Pro:testgit lili$ git commit -m "test add"

    [master (root-commit) d12a913] test add
    1 file changed, 1 insertion(+)
    create mode 100644 README
    Lilis-MacBook-Pro:testgit lili$ git push
    fatal: No configured push destination.
    Either specify the URL from the command-line or configure a remote repository using

    git remote add <name> <url>

    and then push using the remote name

    git push <name>

    建立项目分支和切换项目分支

    查看当前作业分支用git branch命令,打*号的那个就是当前操作分支

    新建分支用如下命令:

    Lilis-MacBook-Pro:testgit lili$ git branch experimental
    Lilis-MacBook-Pro:testgit lili$ git branch
      experimental
    * master

    新建后查看发现多了experimental分支,并且当前分支是master分支,这个是建立git项目默认的分支

    切换分支按照如下:

    Lilis-MacBook-Pro:testgit lili$ git checkout experimental
    Switched to branch 'experimental'
    Lilis-MacBook-Pro:testgit lili$ git branch
    * experimental
      master

    分支内容merge

    在不同分支下共同操作同一个文件(README),初始化时内容是test git,那现在切换到experimental分支下写入一些内容:

    Lilis-MacBook-Pro:testgit lili$ git checkout experimental
    Switched to branch 'experimental'
    Lilis-MacBook-Pro:testgit lili$ vim README
    test git
    modified in experimental branch

    然后git commit -a并输入comment内容, commit -a是一次性添加并commit已存在的文件的修改,其实是add和commit的合并命令

     切换到master分支,也README中输入一行内容并git commit -a

    Lilis-MacBook-Pro:testgit lili$ git checkout master
    Switched to branch 'master'
    Lilis-MacBook-Pro:testgit lili$ vim README
    test git
    add one line in branch master

    这时,两个分支就有了各自不同的修改(diverged);我们可以通过下面的命令来合并“experimental”和“master”两个分支:

    通过如下命令来合并experimental分支到master分支:

    Lilis-MacBook-Pro:testgit lili$ git merge experimental
    Auto-merging README
    CONFLICT (content): Merge conflict in README
    Automatic merge failed; fix conflicts and then commit the result.
    Lilis-MacBook-Pro:testgit lili$ cat README
    test git
    <<<<<<< HEAD
    add one line in branch master
    =======
    modified in experimental branch
    >>>>>>> experimental

    如果两个分支没有冲突,则合并完成;有冲突可以通过git diff来查看冲突

    Lilis-MacBook-Pro:testgit lili$ git diff
    diff --cc README
    index 7ef0026,1633bc2..0000000
    --- a/README
    +++ b/README
    @@@ -1,2 -1,2 +1,6 @@@
      test git
    ++<<<<<<< HEAD
     +add one line in branch master
    ++=======
    + modified in experimental branch
    ++>>>>>>> experimental

     删除项目分支

    git branch -d experimental

    git branch -d只能删除那些已经被当前分支的合并的分支. 如果你要强制删除某个分支的话就用git branch –D

    git diff 和git diff --cache的区别

    Lilis-MacBook-Pro:testgit lili$ vim README
    Lilis-MacBook-Pro:testgit lili$ git diff
    diff --git a/README b/README
    index 8ce43a3..bb9ae0b 100644
    --- a/README
    +++ b/README
    @@ -1 +1,2 @@
     test git
    +test git diff and git diff --cached
    Lilis-MacBook-Pro:testgit lili$ git add README
    Lilis-MacBook-Pro:testgit lili$ git diff
    Lilis-MacBook-Pro:testgit lili$ git diff --c
    --cached        --check         --color         --color-words   --cumulative
    Lilis-MacBook-Pro:testgit lili$ git diff --cached
    diff --git a/README b/README
    index 8ce43a3..bb9ae0b 100644
    --- a/README
    +++ b/README
    @@ -1 +1,2 @@
     test git
    +test git diff and git diff --cached
    Lilis-MacBook-Pro:testgit lili$ git commit -m "test git diff"
    [master a2c52a3] test git diff
     1 file changed, 1 insertion(+)
    Lilis-MacBook-Pro:testgit lili$ git diff
    Lilis-MacBook-Pro:testgit lili$ git diff --cached
    Lilis-MacBook-Pro:testgit lili$

    git diff 比较的是工作目录树与暂存区之间的区别。

    git diff --cached 比较的是暂存区和版本库最后一个版本的区别。

    git diff HEAD 比较的是工作目录树(包括暂存的和未暂存的修改)与版本库最后一个版本的差别。

     

    忽略某些文件

    可以在你的顶层工作目录中添加一个叫".gitignore"的文件,来告诉Git系统要忽略 掉哪些文件,下面是文件内容的示例:

    # 以'#' 开始的行,被视为注释.
    # 忽略掉所有文件名是 foo.txt 的文件.
    foo.txt
    # 忽略所有生成的 html 文件,
    *.html
    # foo.html是手工维护的,所以例外.
    !foo.html
    #  忽略所有.o 和 .a文件.
    *.[oa]

    git之删除和恢复:工作区,暂存区,仓库master

    一、rm只删除工作区信息;

    使用 git checkout -- file即可恢复;

    二、git rm 删除工作区和stage信息;

    1、使用git reset HEAD -- file即可恢复;

    2、恢复步骤:

    1)先使用git reset HeAD -- file从master中把已删除信息copy到到stage区;

    2)再使用git checkout -- file从stage区把已删除信息copy到工作区。over!!!

    3)这时你就看到删除的文件又回来啦。啦啦啦!

    三、git commit -m “file”删除工作区,stage和master信息;

    1、使用git reset --hard HEAD^即可恢复。

    2、恢复步骤:

    1)先使用git reset --hard HEAD^从master回收处恢复到master中;

    2)再使用git reset HeAD -- file从master中把已删除信息copy到到stage区;

    3)最后,使用git checkout -- file从stage区把已删除信息copy到工作区。

    4)这时你就看到删除的文件又回来啦。啦啦啦!

    以上我都亲自试过,很好用。

    就是不知道从master中删除的信息暂时存放在哪里了。

    另外:学习git基础推荐http://www.liaoxuefeng.com/这个博客,写的很浅显易懂!

  • 相关阅读:
    剑指 Offer 51. 数组中的逆序对
    剑指 Offer 68
    剑指 Offer 68
    JS绑定事件三种方式
    图片懒加载原理及实现
    资源加载过程
    了解JS单线程和任务队列!
    JS函数作用域提升
    JS函数种类详解
    ES6之模版字符串
  • 原文地址:https://www.cnblogs.com/gslyyq/p/5119936.html
Copyright © 2011-2022 走看看