基本操作
1.要使用Git进行版本管理,必须先初始化仓库:
git init #执行成功后目录会生成隐藏文件.git
.git目录里存储着管理当前目录内容所需的仓库数据,这个目录的内容称为 “附属于该仓库的工作树” ,文件的编辑在工作树中进行,然后记录到仓库中,以此管理文件的历史快照(记录),若想恢复到原来的文件内容,可调用文件的历史快照。
2.查看仓库状态命令:
git status
工作树和仓库在被操作的过程中,状态会不断发生变化,所以这个命令很重要。
3.向暂存区(Stage)中添加文件:
git add filename #该文件并不会被记入Git仓库的版本管理对象中
4.保存仓库的历史记录:
git commit -m "提交描述"
git commit -am "提交描述" #省去了git add操作
commit会生成历史快照,若提交时不加-m,那么会自动进入编辑器来进行提交内容的详细编写。若在编辑器启动后想中止提交,可将提交信息留空并直接关闭编辑器
在编辑器中记述提交信息的格式:
第一行:用一行文字简述提交的更改内容
第二行:空行
第三行以后:记述提交的原因和详细内容
5.查看提交日志
git log #当前branch所有commit后的记录(哈希值)
git log README.md #只查看指定文件的日志
git log -p README.md #显示文件的改动,文件的前后差别会显示在提交信息之后
6.查看更改前后的差别
git diff #可以查看工作树、暂存区、最新提交之间的差别
在执行git commit 命令之前先执行git diff HEAD命令(当前最新提交与暂存区的差别),查看本次提交与上次提交之间的区别,确认之后再进行提交。HEAD指向当前分支中最新一次提交的指针。
分支操作
在进行多个作业并行开发时,会用到分支。每个分支都有自己的最新代码。master分支是Git默认创建的分支,因此基本上所有开发都是以这个分支为中心进行。
不同分支中,可以同时进行完全不同的作业,等该分支的作业完成后再与master分支合并(merge),通过灵活运用分支,可以同时实现多人并行开发
1.显示分支一览表
注意点:只有分支有内容,创建的分支才能显示
git branch #分支名列表显示,同时可以确认当前所在分支
2.创建并切换分支
git checkout -b #以当前master分支为基础创建新的分支
3.创建分支、切换分支
git branch feature-A #创建分支
git checkout feature-A #切换分支
在这个状态下像正常开发那样修改代码、执行git add命令并commit,代码就会提交至feature-A------不断向一个分支提交(commit)操作,称为**“培育分支”**。
feature-A分支的更改并不会影响到其他分支,这就是开发中创建分支的优点,可以在不互相影响的情况下同时进行多功能开发。
4.切换回上一个分支
git checkout - #"-"为连字符,代替分支名称,就可切换回上一个分支
5.特性分支与主干分支概念
特性分支:集中实现单一特性(主题),除此之外不进行任何作业的分支,即使遇到BUG,也要再创建新的分支,在新分支中进行修正。在日常开发中,往往会创建数个特性分支,同时再保留一个随时可以发布软件的稳定分支(master)
主干分支:特性分支的原点,合并的终点(master)。有时需要同Tag标签等创建版本信息,同时管理多个版本发布,拥有多个版本发布时,主干分支也有多个。
6.合并分支
feature-A的内容合并到主分支
git checkout master #切换到主分支
git merge feature-A #首先要切换到主分支,再进行其他分支的合并
git merge --no-ff feature-A #在历史记录中记录本次分支合并---在编辑器中录入合并信息
7.以图表形式查看分支
git log --graph #以图表的形式输出日志,能清楚看到特性分支(feature-A)提交的内容被合并
更改提交的操作
1.回溯历史版本
累积提交日志作为历史记录,不断培育一款软件,Git的特征便是可灵活操作历史版本
git reset hash_value
git reset --hard hash_value #要让仓库的HEAD、暂存区、当前工作树回溯到指定状态,需要用到--hard参数,只要提供目标时间点的哈希值
2.日志
git log #只能查看以当前状态为终点的历史日志
git reflog #可查看当前仓库的操作日志
git reflog:
git log:(commit的日志,提交的终点)
只要不进行Git的GC(Garbage collection),就可以通过日志随意调取近期的历史状态,随意在过去和未来穿梭。当开发者执行了错误的Git操作,也可以利用git reflog 恢复到原先的状态
3.消除冲突
冲突:
当两分支对同一文件进行编辑时,同一行有不同的更改,那么合并就会有冲突(Conflict)。
解决冲突:
**直接进入文件中,会有冲突的提示,以此来手动进行修改。修改后执行git add 、git commit 提交 **
4.修改提交信息
git commit --amend #只针对修改上一条提交信息
5.压缩历史
若发现两个commit是一个操作,可以将两个提交历史记录压缩成一个
git rebase -i HEAD~2 #与之前一次的提交合并,在历史记录中合并为一次提交
git rebase --abort #放弃合并,回到rebase操作之前的状态,之前提交不会被丢弃
git rebase --skip #将应用冲突地commit丢掉
6.快照与Git对象
快照:暂存内容提交到历史记录中的工作流----记录。
Git对象:数据对象、树对象、提交对象分别代表我们想要跟踪的不同项目快照。
推送至远程仓库
步骤:
1.创建本地仓库
2.创建GitHub仓库
3.本地仓库连接远程仓库
4.本地代码编写完成推送至远程仓库
实操
注意:为了与本地仓库保持一致,创建GitHub时不要初始化其他文件
1.本地仓库添加远程仓库
git remote add orangin git@github.com:Adreaming5101/jQuery-HTML-CSS #执行后git会自动将远程仓库置为origin(标识符)
在GitHub上创建的仓库路径为“git@github.com:用户名/jQuery-HTML-CSS.git”,git remote add命令将它设置成本地仓库的远程仓库。
2.推送至远程仓库
git push -u origin master #推送至远程仓库的master分支
#-u参数:在推送的同时,将origin仓库的master分支设置为本地仓库当前分支的
upstream。添加这个参数,将来运行git pull 命令从远程仓库获取内容时,本地
仓库的这个分支可直接从origin的master分支获取内容。
3.推送分支
git checkout -b feature-B #本地仓库创建feature-B分支
git push -u origin feature-B #向远程仓库推送feature-B分支 ,查看GitHub的仓库就可以看见feature-B分支
从远程仓库获取
所有能够访问这个远程仓库的人都可以获取feature-B分支并加以修改。
1.新建一个本地仓库,并clone
git clone git@github.com:Adreaming5101/jQuery-HTML-CSS.git
添加参数可以同时显示本地仓库和远程仓库的分支信息
git branch -a
2.获取远程的feature-A分支
新仓库clone下来后只有master分支,并没有远程仓库的其他分支,所以要获取远程仓库的分支
git checkout -b feature-A origin/feature-A #以远程仓库的feature-A为来源,本地创建并切换feature-A分支
3.获取最新的远程仓库分支内容
当远程仓库的feature-A分支有更新时:获取feature-A分支的最新内容
git pull origin feature-A #将本地的feature-A分支状态更新至最新
总结注意点:
今后只需像平常一样在本地进行commit再push给远程仓库,就可与其他开发者在同一个分支中进行作业,不断给feature-A增添新功能。
若两人同时修改同一部分的源代码,push时就会出现冲突,那么为了减少冲突,建议更加频繁地进行pull和push。
当然Git还有更加复杂地操作,这里只叙述了基本操作,遇到问题可查看资料:https://git-scm.com/book/zh/v2