1、git安装
下载:https://git-scm.com/downloads 注意对应版本(macx,windows,linux)
安装:一路向下
打开命令窗口:Git Bash
初始化:设置全局变量
命令:git config --global user.name “kmor” (设置的是提交者用户名)
命令:git config –global user.email kmor1984@163.com (设置邮箱)
2.创建版本库
命令:mkdir –p D:/git/repository (在D盘上创建了一个文件夹)
进入D:/git/repository
命令: git init (初始化git库)
命令:git add test.txt (把文件添加到git库的暂存区,并未提交)
命令:git commit –m “这个是添加提交时的说明”
遇到的问题:如果要提交的文件不是在/d/git/repository下面的话,需要手动把该文件添加到这个目录下,再add到暂存区,否则会提示添加不成功,如:
$ git add 学习帐号.txt /d/git/repository/
提示错误 如下:fatal: D:/git/repository/: 'D:/git/repository/' is outside repository
批量add多个文件,一次commit提交暂存区里所有的文件,命令如下:
命令:git add text1.txt text2.txt text3.txt
命令:git commit –m “一次提交所有的暂存库里的文件---慎用”
命令:git commit test1.txt text2.md -m "提交多个指定文件"
查看被修改,但未提交的文件: 命令:git status 这个命令是如果有repository只是修改了而没有提交,运行该命令会提示有哪些文件修改了未提交。如果想要查看具体的哪些内容被修改,可以运行 git diff ,该命令只会显示不同的内容,相同的内容不展示。
以下操作遇到的问题:text.txt文件如果含有中文件,展示为乱码,MD文件不会出现乱码。
查看提交日志:命令:git log - -pretty=oneline(会显每一次提交的记录)
3、版本的回退
命令:git reset - -hard head^(回退上一个版本)
命令:git reset - -hard head^^(回退上上一个版本)
命令:git reset - - hard a73d737(a73d737这个是每次提交的版本日志的头文件索引)
4、git工作区间
git工作区是指文件目录
版本库.git目录
当使用git add 《文件》 时是把工作区的文件放到版本库里面的暂存区
当使用git commit -m 把暂存区里面的东西提交到当前分支的HEAD里面
一些小测试:
场景1:一个文件经过多次add(但未commit),提交后以最后一次的add内容为准。
场景2:一个文件经过修改—add,再修改(未add),提交后,还是第一次的修改为主。
以上场景说明:commit,只负责提交暂存区里面的文件。
场景3:只在工作区,未添加到暂存区----回退(前提是:该文件之前有提交过版本库)
命令:git checkout test2.txt(相当于是把版本库里的版本重新拉取到本地)
场景4:已添加到暂存区----回退(此回退是从分支上拉取到暂存区里)
命令:git reset head test2.txt(相当于是把分支的的版本重新拉到暂存区)
场景5:已提交的版本---回退
命令:git reset –hard head^(见上面的版本回退)
5、版本 的删除
- 删除本地的文件:rm –rf test2.txt (此操作可以通过git checkout test2.txt来进行文件恢复)
- 删除版本库的文件:git rm –rf test2.txt(此操作是把版本库里的东西进行删除,包括暂存区和分支)
6、创建一个dev分支
命令:git checkout -b dev (此命令相当于两个命令的组合:git branch dev <新建一个分支dev>;git checkout dev<切换到这个dev分支上>)
切换分支:git checkout (master或者dev)
查看当前的分支:git branch
一个小操作:将工作区的一个test2.txt文件修改完成后,commit到dev分支上,再切换到master分支,再git checkout test2.txt,后查看,文件又恢复到了之前的一个版本,这是因为test2.txt修改了,只提交到了dev分支上,并未提交到master分支上,所以checkout到本地后,版本还是之前的那个版本。
一个值得关注的问题:切换分支后,工作区间的内容也会跟分支保持一致,如以上小操作,切换到master后,打开工作区间的文件内容查看,是master这个分支的文件内容。切换到dev分支后,打开的工作区间的文件内容,是dev这个分支的文件内容。
7、合并分支
命令:git merge dev(值得注意:首先要切到你要合并的分支上,再行合并)
解决代码冲突问题:
原因描述:当前有两个分支,一个是master,一个是dev,从master上面拉出一个dev时,dev再进行修改,同时,master也发生了不同的修改,这个时候,你再把dev merge到master上时,会提示代码冲突,这个冲突需要手动去掉冲突。
合并分支应该注意的地方:git merge dev这个命令默认是开启fast-forward模式,这个模式的特点是:合并之后,就成了一个分支记录了,看不出来从哪个分支合到哪个分支的轨迹,但是合并时,把fast-forward关掉后,则查询合并记录,则能清楚的显示它的轨迹。
合并关掉fast-forward命令:git merge --no-ff -m "merge with no-ff" dev
查看合并历史信息命令:git log --graph --pretty=oneline --abbrev-commit
8、分支挂起
当有dev分支上在开发东西,还未合并到主干,另一个紧急bug要修改,只能从master上再拉一个分支,这个时候如果你来回切主干的话,工作区间还是之前的dev上还没有开发完成的代码。这个时候只能挂起dev,先解决bug再干活了。进入到dev,挂起命令:git stash ,再解决bug,解决完成之后,需要解挂,解挂前先查看一下挂起命令:git stash list 。解挂命令:git stash apply,解挂后,需要删除临时挂起的文件,命令如下:git stash drop(解挂和删除挂起文件的这两个命令也可以合成一个命令:git stash pop)
挂起可以有多次挂起,每一次挂起会创建一个挂起点,每一个挂起点会有对应的保存挂起的数据信息。所以可能会存在多个挂起点,所以要恢复某一个挂起点时:git stash apply stash@{0}
9、分支删除
命令:git branch –D dev