学习内容来源:
廖雪峰Git教程
集中式和分布式
集中式:集中存放在中央服务器、必须联网
分布式:每个人电脑上都是完整的版本库,需要协同的时候可以自己去推送push给接收方,或者才能够发送端pull下来需要的代码。
安装Git
自行百度,这块我使用已经安装好Git的wsl-ubuntu进行学习
创建版本库
git init
用来将当前目录变成git可以管理的目录。
git add
添加文件,git commit
提交文件
时光穿梭机
git status
查看修改状态
git diff
查看修改
版本回退
git log
查看提交日志,退出可能需要按一下q
git log --pretty=oneline
单行显示日志
HEAD
表示当前版本,HEAD^
表示上一个版本,HEAD^^
表示上上一个版本,HEAD~100
表示HEAD以上100个版本。
git reset
可以回退到历史版本。git reset --hard HEAD^
回到了上一个版本。git reset --hard commit_id
回到指定id。
git reflog
可以查看历史命令。
工作区和暂存区
工作区:就是当前git仓库所在的目录,除了.git版本库之外。
版本库:里面存了很多东西,
其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
管理修改
Git管理的是修改,git add
将修改提交到暂存区Stage里面,git commit
将修改提交到当前分支上。
撤销修改
git checkout --filename
可以丢弃工作区的修改!
没有--就会变成切换到另一分支!
git checkout 既可以,,也可以。
git reset HEAD <file>...
可以清掉暂存区里面的文件。
git reset命令既可以回退版本, 也可以把暂存区的修改回退到工作区。 当我们用HEAD时, 表示最新的版本。
git reset既可以,,也可以。
删除文件
文件管理器删除文件之后
git rm
可以从当前版本库里面删除文件,之前commit过的文件在被删除之后也能回退。。
git checkout --
可以从版本库里面将被删掉的文件恢复。
远程仓库(杀手锏之一)
建了一个gitee账户,添加ssh公钥。OK
添加远程仓库
git remote add origin https://gitee.com/dluff/learngit.git
#上面将添加一个名为origin的远程仓库
git push -u origin master
#将本地库的素有内容推送到远程仓库上
#把本地库的内容推送到远程, 用git push命令, 实际上是把当前分支master推送到远程。
#由于远程库是空的, 我们第一次推送master分支时, 加上了-u参数, Git不但会把本地的master分支内容推送的远程新的master分支, 还会把本地的master分支和远程的master分支关联起来, 在以后的推送或者拉取时就可以简化命令。
git push origin master
把本地master分支的最新修改推送到GitHub。
从远程仓库克隆
记住git clone
就可以了。
分支管理
在合并之前,分支应该是别人看不到的。
创建于合并分支
git checkout -b dev
创建并切换到dev分支。
等价于git branch dev
+git checkout dev
git branch
卡伊查看当前的分支状况。
git merge
用来合并制定分之道当前分支。
git branch -d
用来删除分支。
Git鼓励你使用分支完成某个任务, 合并后再删掉分支, 这和直接在master分支上工作效果是一样的, 但过程更安全。
解决冲突
当Git无法自动合并分支时, 就必须首先解决冲突。 解决冲突后, 再提交, 合并完成。
git log --graph
可以看到分支合并图。
分支管理策略
首先, master分支应该是非常稳定的, 也就是仅用来发布新版本, 平时不能在上面干活;
那在哪干活呢? 干活都在dev分支上, 也就是说, dev分支是不稳定的, 到某个时候, 比如1.0版本发布时, 再把dev分支合并到master上, 在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活, 每个人都有自己的分支, 时不时地往dev分支上合并就可以了。
团队合作的分支看起来就像是这样:
合并分支时, 加上--no-ff参数就可以用普通模式合并, 合并后的历史有分支, 能看出来曾经做过合并, 而fast forward合并就看不出来曾经做过合并。