git入门

内容介绍

检出:
对于一个文件修改(modify) 或者是 删除(delete) 那么文件名之前就会有对应的操作动作
modified : a.txt
delete : a.txt
检出指的是移除前面的动作 恢复到动作之前的文件状态
分支:
分支是由多个commit 按照一定的时间顺序链成的工作提交线, 分支名指向最新提交的commit
git 忽略:
作用是git在做提交的时候忽略的文件

使用:

1.对已提交的文件再次执行编辑

mkdir test && cd test && git init

   touch a.txt b.txt

   echo 'aaaaa' >> a.txt
   echo 'bbbbb' >> b.txt

   git add .
   git commit -m '第一个版本' 

   vi a.txt  --> 编辑内容

   git status
  1. 由于 git add … 说明 被修改的文件重新拉回到工作区

  2. 可以使用 git restore … 撤销此次的修改 —> 检出

  3. 如果确定修改 要对这次修改做版本提交 使用 git add . / git commit -m

  git restore a.txt  //检出操作 移除a.txt的前面的修改动作恢复修改之前的文件状态

  git status
  /*
      On branch master
      nothing to commit, working tree clean
  */

  vi a.txt  --> 编辑内容 

  git status

  git add . / git commit -m ''  //对修改的内容做版本提交

对已提交的文件再次执行删除
删除模式:基于操作系统的文件删除 rm / git方式的删除 git rm
场景:有两个commit ,第一个commit 包含a.txt 和 b.txt 第二个commit 包含a.txt b.txt 只不过对a.txt重新修改了
删除b.tx
2.执行操作系统删除

  ls --> a.txt 和 b.txt

        rm -rf b.txt --> 操作系统的直接删除 

        ls --> 只有a.txt

        git status
        /*
            On branch master
            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:    b.txt

            no changes added to commit (use "git add" and/or "git commit -a")
            1. git add file 说明此时删除的b.txt 文件拉回到工作区 ,只不过看不到b.txt
            2. 执行了git add  /git commit  形成新的版本 ,这个版中才真实的没有b.txt
            3. 也可以使用 git restore <file>... 对删除动作进行检出
        */  

        git restore b.txt // 检出删除

        ls --> 发现b.txt 

        rm -rf b.txt --> 再次执行删除 

        git add .

        git status
        /*
            On branch master
            Changes to be committed:
            (use "git restore --staged <file>..." to unstage)
                    deleted:    b.txt

            注意:1. add 提交的不是某一个单独的文件 二十对某一个文件的删除动作 ,如果后面执行commit 也是提交的文件的删除动作 ,
            形成的新版本中就真的不存在b.txt文件了 
                 2. 如果现在还想后悔  
                    a) git restore --staged <file>... 将暂存区的提交撤销到工作区 
                    b)  git resrore <file>    检出了删除动作 工作区就clean这个状态了 b.txt的文件就回来了


        */

        git commit -m '删除了b.txt 文件'
        
        ls --> 只有a.txt 

        git status  --> 工作区也是干净的

3.执行git方式的删除

  git rm a.txt

        ls --> a.txt删除了 

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

            注意:
                如果是git rm 删除一个已提交的文件 ,这个文件包括动作(deleted)拉回到暂存区

        */
        //如果要撤销删除
        git restore --staged a.txt --> 将暂存区的a.txt 拉回到工作区 

        git restore a.txt --> 执行检出 

        ls  --> 出现a.txt

        git status  --> 工作区 干净

        //如果要提交删除 
        git rm a.txt

        git commit -m '删除a.txt' // 为什么不用add ? 因为已经在暂存区,所以直接提交删除

4.git忽略

  • 4.1创建.gitignore
  • 4.2编辑.gitignore文件
 	# 忽略单个文件
    a.txt 

    # 忽略一类文件 
    *.txt

    # 忽略某一类文件 除了特定文件 
    *.js 
    !c.js

    #git会自动忽略空目录

    #忽略一个非空的目录
    /a

    #忽略目录下的某些文件名 
    /a/*

    /a/*/*.txt  -->  /a/o/*.txt  /a/b/*.txt

    /a/**/*.txt --> /a/o/*.txt  /a/o/c/d/*.txt

5.分支的创建 切换 删除 查看

5.1 创建分支

  • git branch 分支名

5.2 查看分支

  • git branch -v 查看分支的同时查看分支所指向的commit

5.3 切换分支

  • git checkout 分支名

5.4创建并切换分支

  • git checkout -d 分支名

5.5删除分支

  • git branch -d 分支名

6.分支合并方式

6.1 master 分支相对于dev落后两个commit ,使用meger默认合并

 gir branch -v
    /*
        * dev    830ef05 dev第四次提交
          master e07ebf0 dev第二次 c文件
    */   
    //master分支合并dev分支 
    git merge dev   
    /*
        Updating e07ebf0..830ef05
        Fast-forward  //前进 ff

        ff合并的细节:
            1.  两个分支归于从同一个commit
            2.  fast-forward 会丢失分支信息 
                git log --graph
    */ 

6.2master 分支相对于dev落后两个commit ,使用meger默认合并

 git branch -v
    /*
        * dev    297cbf0 新建b.txt
         master 830ef05 dev第四次提交
    */

    git checkout master

    git merge --no-ff dev 
    /*
        1.使用--no-ff合并主动合并的分支会指向下一个新的commit版本
        2.--no-ff 不会丢失分支信息 
            git log --graph --pretty=oneline --abbrev-commit
    */

    //打开编辑器要求输入版本说明文字 --》 有新的commit形成

    git branch -v
    /*
          dev    297cbf0 新建b.txt
        * master 0ad5dc9 Merge branch 'dev' no-ff 合并dev分支
    */

    git checkout dev
    git merge mster  --> 两个指向同一个commit

7.在合并分支的时候的冲突

7.1 每个分支对同一个文件 的同一行有不同的实现 ,前提是分支指向的版本之间没有时间关系

 	mkdir test && cd test && git init

    touch a 

    git add . && git commit -m 'init'

7.2 dev分支对a文件的修改

	git checkout -b dev
    echo 'dev...' >> a
    git add . && git commit -m 'dev...'

7.3 master分支对a文件的修改

 	git checkout master
    echo 'master...' >> a 
    git add . && git commit -m 'master...'

7.4在master 合并 dev 分支

		Auto-merging a  //自动合并a
        CONFLICT (content): Merge conflict in a // 内容冲突
        Automatic merge failed; fix conflicts and then commit the result. // 解决冲突 ,并且提交结果

7.5如何解决冲突??
7.5.1查看冲突文件,并通过协商解决该冲突
cat a

				<<<<<<< HEAD  (HEAD 指向当前分支master->)
                master...
                =======
                dev....
                >>>>>>> dev

                master...,dev... //最终达成一致的解决方案,以这行代码为准

git status

 				On branch master
                You have unmerged paths.
                (fix conflicts and run "git commit")
                (use "git merge --abort" to abort the merge)  //放弃合并

                Unmerged paths:
                (use "git add <file>..." to mark resolution) // 提交最终修改的a文件
                        both modified:   a

                no changes added to commit (use "git add" and/or "git commit -a")

7.5.2git add . // 提交修改a文件
git status

				On branch master
                All conflicts fixed but you are still merging.
                (use "git commit" to conclude merge)
                Changes to be committed:
                        modified:   a

7.5.3 git commit -m ‘合并dev分支,解决冲突a文件

	// master分支指向最新的版本(冲突解决的版本 ),但是dev分支 还是指向之前的版本。需要将dev的分支移动也指向最新的版本,(?? 会不会冲突呢?不会!)

    cat a 
    /*
        master...,dev...
    */
    
    //切换到dev
    git checkout dev
    cat a
    /*
        dev...
    */

    git merge master 

    cat a
    /*
        master...,dev...
    */

    git branch -v
    /*
        * dev    f90becf 合并dev,解决冲突文件a
          master f90becf 合并dev,解决冲突文件a
    */

8.游离操作 checkout
8.1 it checkout 分支 --》切换分支
8.2 git checkout -b 分支 --》 创建并切换
8.3 git checkout – 文件名 --》检出文件
8.4 git checkout sha1

            You are in 'detached HEAD' state. You can look around, make experimental
            changes and commit them, and you can discard any commits you make in this
            state without impacting any branches by switching back to a branch.

            If you want to create a new branch to retain commits you create, you may
            do so (now or later) by using -c with the switch command. Example:

            git switch -c <new-branch-name>

            Or undo this operation with:

            git switch -

            Turn off this advice by setting config variable advice.detachedHead to false

            HEAD is now at abc9b1a version 4

            1.你处于独立的状态(游离状态)
            2.可以执行写写操作,但是写操作必须提交  (commit-- 新的sha1)
            3.入提交了写操作,必须起一个新的分支指向于这个sha1
            4.在游离状态下未作任何操作 可以使用git checkout master  切出游离状态

注意点:

在没有任何 commit 的情况下 不能创建新的其他分支

分支分类:
master 主分支 代码发布分支 不直接做开发
dev 开发分支 代码开发分支
test 测试分支
hot bug热修复分支

总结

  1. 冲突的怎么产生的?
    前提:两个版本之间没有时间顺序
    merge 合并的时候计算机会尝试自动合并,但是在遇到同一个文件的时候,不知到怎么合并,所以提示冲突
    需要人为介入来解决冲突

  2. 两个没有时间关系的分支合并 ,一定会产生新的提交版本(冲突后的版本,未冲突的版本),
    被合并的版本会移动到主动发起合并的分支上
    在游离状态下做了版本提交
    git add .
    git commit -m ‘’ --> sha1

    git branch 新分支名 sha1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值