系统学习Git

Git目录

    • 工作区、暂存区和版本库分别是什么?
    • Git常用命令有哪些?
    • Git是如何进行分支管理的?
    • Git如何查看提交历史?
    • 实践出真知!
    • 报错
      • fatal: pathspec 'text1.txt' did not match any files

Git 是一个开源的分布式版本控制系统

工作区、暂存区和版本库分别是什么?

  • 工作区:在电脑里能看到的目录
  • 暂存区:也叫索引,一般存放在 .git 目录下的 index 文件中
  • 版本库:隐藏目录 .git,是 Git 的版本库。

系统学习Git_第1张图片

Git常用命令有哪些?

系统学习Git_第2张图片

  1. git add:添加文件到暂存区。将代码写入到对象库中的一个新对象中,将该对象ID记录到暂存区,并更新目录树

  2. git commit:提交暂存区到版本库。将目录树写入版本库,master分支指向新的目录树

  3. git reset HEAD :版本回退

    • mixed:为默认值,等同于git reset。将文件回退到工作区,此时会保留工作区中的文件,但会丢弃暂存区中的文件;
    • soft:将文件回退到暂存区,此时会保留工作区暂存区中的文件;
    • hard:将文件回退到修改前,此时会丢弃工作区暂存区中的文件;
  4. git tag -a v1.0:打个标签

  5. 其他命令,相对好理解

Git是如何进行分支管理的?

  1. 一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

  2. 实例:

$ ls
README
$ echo 'runoob.com' > test.txt
$ git add .
$ git commit -m 'add test.txt'
[master 3e92c19] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
$ ls
README        test.txt
$ git checkout testing
Switched to branch 'testing'
$ ls
README

解释:在master分支上提交更新,在testing分支看不到,就是我们想要的结果

  1. 一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。
git merge (branchname)	//合并分支
git branch -d (branchname)	//删除分支
  1. 合并冲突:当同一个文件被两个分支都修改过,此时合并报错,需要修改。

  2. Git分支指向的过程描述:参考文章

    • 三个指针:master,dev,HEAD

    • 新创建一个从分支devmaster不动,HEAD指向dev,一直保持在提交的最前沿

系统学习Git_第3张图片

  • 合并后,master指向当前devHEAD指向master

系统学习Git_第4张图片

  1. 当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容。切换分支就是移动HEAD。

Git如何查看提交历史?

  1. git log --oneline //查看提交历史简洁版本
    
  2. git log --reverse --oneline //逆向查看
    
  3. git log --author=Linus --oneline -5 //查看Linux用户的操作
    
  4. git blame README //查看一个文件的全部过程
    

实践出真知!

尝试了才知道实践的重要性,推荐新建一个文件夹,用git创建一个本地仓库,每步操作后到不同的分支下ls,看看有什么变化。光看理论确实没有动手效果更好。

  1. git init后不会生成master分支,commit后才有!和菜鸟教程上说的似乎有点出入~
  2. 不论在主分支master还是从分支test创建文件,另一个分支都会做同样的事情
  3. 谁commit保留谁的文件,删除另一个分支中本次提交的文件。如:在test中commit,test保留此次提交的文件,master中相应文件删除。终于解释了:每个分支代表一条开发线,必须commit!

报错

fatal: pathspec ‘text1.txt’ did not match any files

先更新本地仓库

你可能感兴趣的:(专业书籍,#,后端,git,学习,github)