【Git】git再学习
更多学习内容:
Windows下Git使用入门(GUI工具:TortoiseGit)
Git命令
1.初始化
git init # 在一个文件夹下执行此条命令是告诉git我要对文件进行版本控制,git会初始化一个工作区
2.配置
git config user.name “名字”
git config user.email “邮箱”
3.状态
git status #查看当前状态,获知哪些文件有待提交或着已修改
4.分区
添加&提交
git add 文件名
git commit [-m “提交的注释”]
5.设置忽略规则
在git工作区的根目录创建.gitignore: > .gitignore
忽略文件的命令:
echo “a.o” >> .gitignore #表示忽略a.o文件
echo “*.o” >> .gitignore #表示忽略以.o结尾的文件
echo “out/” >> .gitignore #表示忽略out文件夹下的所有文件
6.快照
7.日志
git log [-number]#查看日志; number这个参数表示最近number次的提交记录
git log --oneline #每条提交记录只用一行展示
git log -1 -p #-1用来展示最近一次的提交;-p参数用来展示提交或修改的内容
gitk #图形化界面的方式查看提交
Ps:使用gitk前需要执行安装命令: sudo apt-get install gitk
8.差异比较&版本检出
master
C1是一次提交;master是一个分支,指向最新的提交,可以理解为一个指针;HEAD是一个标签,指向当前的分支
现在有了一个新的提交C2,它是基于已经有C1的基础上的提交。master会指向新的提交C2。
master是一个分支的名称,HEAD指向当前分支。它们仅仅是指针,指向某一个提交码。
差异
不带参数的调用
git diff filename
这种是比较 工作区和暂存区
比较暂存区与最新本地版本库
git diff --cached filename
比较工作区和最新版本
git diff HEAD filename
比较工作区与指定的 commit -id 的差异
git diff commit-id filename
比较暂存区与指定 commit-id 的差异
git diff --cached commit-id filename
比较两个 commit -id 的差异
git diff commit-id commit-id
取出历史版本
git checkout filename #从缓存区取出历史文件到工作区
git checkout HEAD filename #从版本库取出历史文件到工作区和缓存区
9.分支
HEAD总是指向当前分支。
新建分支
git branch dev #创建一个名为dev的分支
git branch #查看当前的所有分支
git checkout dev #切换到dev分支
假设此时dev分支出现了bug,切换到master分支
创建并切换到bugfix分支: git checkout -b bugfix
分支合并
Ps: 下面的例子中额bugfix分支是基于master分支,也就是bugfix中的文件包含master分支的所有文件。
切换到master分支,将bugfix分支整合到master分支
git checkout master
git merge bugfig
删除分支 git branch -d bugfix
Ps:下面的dev分支和master分支的文件没有包含关系。 master整合dev分支是git通过新建一个分支来实现的。 具体见下面的例子。
解决冲突
模拟冲突情景:
当两个git用户从服务器上克隆了当前的git版本库,然后同时对其中的空文件1进行修改,然后提交并上传到服务器,这时候发生冲突了。 那么需要我们手动解决冲突。 打开所改动的文件,保存两个用户修改的内容,其余多余的东西删除。具体见例子。
打开文件1后。内容如下:
当前的意思是当前分支也就是master分支添加了内容add on master,”====”分隔符; dev分支添加了add on dev到文件1中。
只保留第2行和第4行的内容。
通过命令git log --graph --oneline 以图的形式且每次提交在一行展示查看日志如下:
从上面的日志可以看出,master从另一个分支合并了C4,C5,C6后,然后合并了dev分支,再在maser分支向文件1添加了add on master内容,在dev分支向文件1中添加了add on dev内容,并且master分支合并了dev分支【这里手动解决了冲突】。 当前位于master分支。
学习和使用Git重点:分支、解决冲突、版本回退、权限管理等。