zoukankan      html  css  js  c++  java
  • Git 学习相关笔记

    Git Bash 相关命令学

    基础概念

    参考:

    https://www.cnblogs.com/gaoht/p/9087070.html

    https://www.runoob.com/git/git-branch.html

    Git本地数据管理,大概可以分为三个区:

    • 工作区(Working Directory):是可以直接编辑的地方。

    • 暂存区(Stage/Index):数据暂时存放的区域。

    • 版本库(commit History):存放已经提交的数据

      image-20210108111642133

    1、文件相关

    $ cd [路径] (进入到指定的目录)
    $ cd ..	(返回到上级目录)
    $ pwd (显示当前目录)
    

    ls(查看路径相关)

    $ ls (显示当前文件夹中的文件与文件夹信息)
    $ ls -a	(显示出隐藏文件)
    $ ls -l	(可以查看更多文件信息-文件权限、用户组、文件生成的具体日期)
    $ ls -al (类推)
    

    mv (移动文件)

    $ mv [源地址和文件名] [目的地址] (移动文件)
    $ mv -r [源地址和文件名] [目的地址] (剪切)
    

    touch /echo(创建文件)

    区别:

    echo 可以在创建文件时给文件指定内容

    touch 不能指定文件内容

    例如:
    $ echo 'name'>name.txt (创建名为name的txt文本,文本内容使name)
    $ touch test.txt (创建名为test的txt文本内容)
    

    cat (查看文件内容)

    $ cat [路径和文件名]
    

    image-20210108104638944

    2、git分支管理

    查看分支

    git branch
    

    创建分支

    git branch [branch_name]
    

    切换分支

    注意:切换分支时,Git会用该分支最后提交的快照替换你的工作目录的内容,因此多个分支不需要多个目录。

    git checkout [branch_name]
    

    创建并切换分支

    git branch -b [branch_name]
    

    删除分支

    git branch -d [branch_name]
    

    例如删除testing分支:

    $ git branch
    * master
      newtest
      testing
    $ git branch -d testing
    Deleted branch testing (was c8fd1bd).
    $ git branch
    * master
      newtest
    

    合并分支

    注意: 一旦分支有了独立内容,

    git merge [branch_name] (合并branch_name分支到当前分支)
    
    $ git branch
    * master
      newtest
    $ ls
    README  name.txt
    $ git merge newtest
    Updating ab1a855..6e74ece
    Fast-forward
     b.html   | 0
     name.txt | 1 -
     2 files changed, 1 deletion(-)
     create mode 100644 b.html
     delete mode 100644 name.txt
    $ ls
    README  b.html
    

    将 newtest 分支合并到主分支中,主分支中的 name.txt 文件被删除。

    合并完成后就可以删除分支:

    $ git branch -d newtest
    Deleted branch newtest (was 6e74ece).
    

    查看状态(删除后):

    $ git branch
    * master
    
    

    合并冲突

    合并并不仅仅是简单的文件添加、移除的操作,Git也会合并修改。

    $ git branch
    * master
    

    首先我们创建一个叫做 change_site 的分支并切换过去,我们将 b.html 的内容改为:

    <?php
    echo 'runoob';
    ?>
    

    命令为:

    $ git checkout -b change_site
    Switched to a new branch 'change_site'
    $ echo "<?php echo 'runoob';?>">b.html
    $ head -3 b.html
    <?php
    echo 'runoob';
    ?>
    $ git commit -am 'changed the b.html'
    [change_site 7774248] changed the b.html
     1 file changed, 3 insertions(+)
    

    将修改的内容提交到 change_site 分支中。 现在,假如切换回 master 分支我们可以看内容恢复到我们修改前的(空文件,没有代码),我们再次修改 b.html 文件。

    $ git checkout master
    Switched to branch 'master'
    $ cat b.html
    $ vim b.html    # 修改内容如下
    $ cat b.html
    <?php
    echo 1;
    ?>
    $ git diff
    warning: LF will be replaced by CRLF in b.html.
    The file will have its original line endings in your working directory
    diff --git a/b.html b/b.html
    index e69de29..ac60739 100644
    --- a/b.html
    +++ b/b.html
    @@ -0,0 +1,3 @@
    +<?php
    +echo 1;
    +?>
    
    $ git commit -am '修改代码'
    [master c68142b] 修改代码
     1 file changed, 3 insertions(+)
    

    现在这些改变已经记录到我的 "master" 分支了。接下来我们将 "change_site" 分支合并过来。

    $ git merge change_site
    Auto-merging b.html
    CONFLICT (content): Merge conflict in b.html
    Automatic merge failed; fix conflicts and then commit the result.
    
    $ cat b.html	# 打开文件,看到冲突内容
    <?php
    <<<<<<< HEAD
    echo 1;
    =======
     echo 'runoob';
    >>>>>>> change_site
    ?>
    

    我们将前一个分支合并到 master 分支,一个合并冲突就出现了,接下来我们需要手动去修改它。

    $ vim b.html
    $ cat b.html
    <?php
    echo 1;
    echo 'runoob';
    ?>
    $ git diff
    diff --cc b.html
    index ac60739,33fe008..0000000
    --- a/b.html
    +++ b/b.html
    @@@ -1,3 -1,3 +1,4 @@@
      <?php
     - echo 'runoob';
     +echo 1;
    ++echo 'runoob';
      ?>
    
    

    在Git中,我们它可以用 git add 告诉 Git 文件冲突已经解决

    $ git status -s
    UU b.html
    $ git add b.html
    $ git status -s
    M  b.html
    $ git commit
    

    3、git rm 相关命令

    3.1、rm 命令

    作用:删除工作区的文件。

    $ rm [文件名]
    

    执行删除命令:

    $ rm a.txt
    

    查看状态(成功删除工作区文件):

    $ git status
    On branch newtest
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            deleted:    a.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    rm 命令只是删除工作区的文件,并没有删除版本库的文件

    删除版本库文件:

    $ git add a.txt
    $ git commit -m 'delete a.txt'
    

    结果:删除了工作区和版本库的文件

    3.2、git rm 命令

    作用:删除工作区文件,并将这次删除放入暂存区。

    注意:要删除的文件是没有修改过的,即和当前版本库文件的内容相同。

    执行删除命令:

    $ git rm name.txt
    rm 'name.txt'
    

    成功删除了工作区文件,并将这次删除放入暂存区。

    查看状态:

    $ git status
    On branch newtest
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            deleted:    name.txt
    
    

    提交:

    $ git commit -m 'delete name.txt'
    [newtest 057f46e] delete name.txt
     1 file changed, 1 deletion(-)
     delete mode 100644 name.txt
    

    成功删除了版本库文件。

    结果:删除了工作区和版本库的文件,以为暂存区不可能有该文件(如果有,则以为着该文件修改后 git add 到暂存区,那样的话 git rm 命令会报错)

    3.3、git rm -f 命令

    作用:删除工作区和暂存区文件,并将这次删除放入暂存区

    注意:要删除的文件已经修改过,就是说和当前版本库文件内容不同。

    a.txt 文件修改过但是还没 git add 到暂存区

    $ git rm a.txt
    error: the following file has local modifications:
        a.txt
    (use --cached to keep the file, or -f to force removal)
    
    

    a.txt 文件修改过已经 git add 到暂存区

    $ git add a.txt
    $ git rm a.txt
    error: the following file has changes staged in the index:
        a.txt
    (use --cached to keep the file, or -f to force removal)
    
    

    由上可见文件修改后不管有没有 git add 到暂存区,使用 git rm 命令删除都会报错。

    • 解决办法

    执行 git rm -f 命令进行删除:

    $ git rm -f a.txt
    rm 'a.txt'
    

    成功删除工作区和暂存区文件,并将此次上述放入暂存区

    查看状态:

    $ git status
    On branch newtest
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            deleted:    a.txt
    

    提交:

    $ git commit -m 'delete a.txt'
    [newtest 0d53d62] delete a.txt
     1 file changed, 0 insertions(+), 0 deletions(-)
     delete mode 100644 a.txt
    

    成功删除了版本库文件。

    • 结果: 删除了工作区、暂存区和版本库的文件。

    git rm --cached 命令

    作用:删除暂存区文件,但保留工作区的文件,并将这次删除放入暂存区。

    执行删除命令:

    $ git rm --cached a.txt
    rm 'a.txt'
    

    查看状态(注意这里文件取消了跟踪):

    $ git status
    On branch newtest
    Changes to be committed:
      (use "git restore --staged <file>..." to u
            deleted:    a.txt
    
    Untracked files:
      (use "git add <file>..." to include in whae committed)
            a.txt
    

    提交:

    git commit -m 'delete a.txt'
    [newtest 0bdc615] delete a.txt
     1 file changed, 0 insertions(+), 0 deletion
     delete mode 100644 a.txt
    

    成功删除了版本库文件。

    结果: 删除了暂存区和版本库的文件,但保留了工作区的文件。如果文件有修改并 git add 到暂存区,再执行 git rm --cached 和 git commit,那么保留的工作区文件是修改后的文件,同时暂存区的修改文件和版本库的文件也被删了。

  • 相关阅读:
    Mac appium.dmg. Xcode Command Line Tools
    利用appium-1.5.3.dmg安装Appium. doctors时,提示 Could not detect Mac OS X Version from sw_vers output: '10.12'
    Bootstrap
    configure: error: xml2-config not found. Please check your libxml2 installation
    php出现Can't use function return value in write context
    Css中路径data:image/png;base64的用法详解
    织梦默认模板导航菜单标签判断首页并高亮显示首页的代码
    [php]在PHP中读取和写入WORD文档的代码
    Windows平台的PHP之开启COM配置
    l【linux】linux rpm包命名规范
  • 原文地址:https://www.cnblogs.com/code-xu/p/14253712.html
Copyright © 2011-2022 走看看