Git学习笔记

  • 创建版本库

  git init: 初始化本地的一个目录,将它变为可管理的仓库

  git status: 查看当前目录中的文件和work space中的差异(即查看是否有文件被修改)   git add file:   git commit -m '描述':如果有多个文件被修改,最好每个文件都执行以

  git add file,而不要git add .,因为执行git add file之后,可以紧跟着执行commit,这样提交之后,你的每个文件都对应了不同的描述,便于别人和自己查看

  git diff file: 当有文件被修改时,想要查看这个文件修改了什么,可以使用git diff file查看

  • 版本回退

  版本类似于快照,每次执行git commit命令,其实就是增加一个版本

  git log: 查看所有版本,如果想要显示的内容比较清晰,可以使用git log --pretty=oneline

  git reset --hard HEAD^: 回退到上一个版本,也就是上一次提交commit时文件的样子

  git reflog: 显示你之前使用过的命令,这样如果你版本回退后,又想回到回退前,那么使用该命令查看之前使用过的命令,然后找到上一回执行回退命令那个地方,找到执行回退时上一回的版本号的id,然后执行git reset --hard id号,就可以了。

    HEAD表示当前版本,HEAD^表示上一个版本,类推HEAD^^,回退的多时,例如回退100,那么就是用HEAD~100

  • 工作区和暂存区

  .git是Git的版本库,Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
  工作区就是我们的工作目录,当执行git add file之后,其实就是将文件file添加到暂存区,然后使用git commit 时,就是将暂存区的内容全部提交到当前分支

  • 撤销修改

  尚未添加到暂存区:当工作区的内容写错时,想要撤销这些修改,可以手动将刚刚修改过的改回去。也可以使用git checkout -- file,不过这样只能是将工作区的修改撤销,如果已经执行了add的话(即已经将修改增加到暂存区,那么就不能用这个方法)
  已经添加到暂存区,但是未提交:当已经将修改添加到暂存区后,想撤销也可以,就是先利用版本回退思想,但是也不是真正的版本回退,因为这次我们使用的命令是git reset HEAD file,只是针对将某个文件回退,回退之后暂存区的内容将被放回工作区,然后就是用工作区撤销的方法撤销即可。
即依次使用命令:git reset HEAD file, git checkout -- file

  • 删除

  如果本地有个文件已经提交到版本库(commit),但是工作区不小心将它删除了,这时使用git status可以看到这个文件确实在工作区删除了,但是版本库中还有这个文件。这时就有两种选择

  1. 确实想删除这个文件,所以现在就是要将版本库里的这个文件也删除,那么使用命令git rm file
  2. 误删了该文件,现在想恢复该文件,使用git checkout -- file
  • 创建及合并分支

  git checkout -b dev:创建dev分支,并切换到dev等价于git branch dev, git checkout dev两条命令

  git branch:查看分支

  git merge <name>:合并某分支到当前分支
  
git branch -d <name>:删除分支

  • 解决冲突

  当各个分支都修改了某个文件,这样就会产生冲突,合并的时候也就不能直接用git merge <name>了,需要手动合并
  查看文件都有哪些地方产生冲突:cat file, 或者直接打开文件看有哪些地方冲突,修改完成之后,重新提交就可以了
  用到的命令: 修改完后要执行add,和commit,这样分支就合并了。
  合并之后,可以用命令git log --graph --pretty=oneline --abbrev-commit查看分支的结果

  • 分支管理策略

  通常合并分支时,Git会用Fast forward模式,但是这种模式在删除分支之后,就会丢失分支的信息,也就从主线上看不出这个地方别合并过。所以建议合并时使用--no-ffde方式的git merge
  即:git merge --no-ff -m '描述' dev,引号里的是对这次操作的描述

  • Bug分支

如果正在一个分支上工作,但是还未完成不能提交,但是又要求你先改了某个Bug,因为该Bug必须赶紧改了之后,合并到master分支,所以你只能先创建一个新的分支去修改,然后合并之后,在切回当前的分支,继续工作。

  1. 所以要先保护现场,使用git stash
  2. 创建新的分支修改,合并到master分支,删除新建的分支,切回之前工作的分支
  3. 恢复现场:用git stash list查看有哪些现场被保护了。恢复现场有两种方法:一是使用git stash apply恢复,但是恢复后,stash内容并未删除,需要用git stash drop来删除。第二种方法是使用git stash pop,恢复的同事吧stash内容也删了。
  • Feature分支

  要删除某个未合并的分支(可能取消了该分支的功能),所以不能用git branch -d dev,而要用git branch -D dev 

  • 创建标签

  git tag <tagname>:创建新的标签,默认为HEAD, 也可以指定一个commit id;
  git tag -a <tagname> -m "tag info" commit id:指定标签信息;也就是一个对该标签的一个说明
  git tag:可以查看所有的标签

  • 操作标签

  git push origin <tagname>:推送一个本地标签
  git push origin --tags:推送全部未推送过的本地标签;
  git tag -d <tagname>:删除一个本地标签
  git push origin :refs/tags/<tagname>:删除一个远程标签

  • 多人协作

  这部分不是很清楚,先放一个链接吧:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320

  • 使用github

   如何为感兴趣的项目贡献自己的力量

  1. fork别人的项目到自己的GitHub的仓库下
  2. 从自己的仓库里clone一份到本地,注意,是要从自己的仓库里clone,因为别人你即便克隆下来,也不能推送
  3. 然后就可以在GitHub上发起一个pull request,等待对方的回应。

 

原文地址:https://www.cnblogs.com/pyexile/p/10958353.html