目录
背景
SVN集中式版本控制系统
所有的代码版本都在svn server远程仓库,client通过连接网络从server上拿下来,必须都在统一局域网下
git分布式版本控制系统
每一个人本地就有一个仓库,操作都向本地仓库进行提交,最后合并时利用一个代码托管平台如github进行合并,也就是远程仓库
创建一个github项目并进行开发。
1.github创建空项目
右边的New
然后按步创建就行
创建完成,这儿的main表示当前在main分支(版本)上工作,initial commit表示提交时的说明
2.关联项目
有两个方法如下:分别是git clone到本地,直接开发即可,第二个是在本地创建项目,再关联到github的远程仓库
2-1. git clone 项目
复制这个连接,https和ssh都可以,后者更安全和快速,现在用前者
然后在终端:git clone [刚才复制的连接]
会做这些事:
1:远程仓库的代码拉到本地,远程仓库名默认origin
2:本地仓库生成一个默认的和远程一样的分支:main,当前就在main分支上
进行正常开发
注意,以下的main和master都是一样的,只是因为版本不同,导致说法不同
利用ssh clone:ssh密钥我配置好,配置方法在最下面
当然利用https方式clone也是可以的
git clone git@github.com:daishiqiang123/test.gitcd test
git log 查看commit记录(工作区到本地仓库的提交记录,远程仓库的提交记录)
echo "hello" > hello.txt 正常开发工作git status 查看一下状态:工作区和暂存区的文件,本地和远程是否一致
git add . 将工作区文件添加到暂存区:(未跟踪状态 -》 未被提交)
git commit -m "first" 将未被提交的文件,也就是暂存区的所有文件提交到本地仓库,并附带提交说明git push origin master 将当前分支push到远程仓库的master分支
因为远程仓库数据有所变动,另外一个人需要拉取最新改动到本地:
git pull origin master
其他操作:修改回退操作
工作区修改的代码不要了:
git checkout -- <filename> 将本地仓库的文件覆盖工作区的文件,即回退到上一次提交的版本
已添加到暂存区,暂存区修改的代码不要了,想撤回:
git reset HEAD HEAD是一个指针,指向最近一次提交,即回退到最近一次的提交,取消(删除)暂存区的修改,修改只在工作区了
已提交到本地仓库,想撤回提交:
git reset --hard <commit_id> 回退到上一个id的版本,hard:删除工作区和暂存区的修改
已push到远程仓库,想撤回:
git reset --hard <commit_id> 回退到上一个id的版本,hard:将暂存区和工作区的修改都删除、mixed(默认):只删除暂存区的修改、soft:保留工作区和暂存区的修改
git push -f origin master 重新将当前版本推送到远端,-f强制,因为只允许领先远程push,不允许落后远程push
其他操作:代码冲突解决
1 多方并发开发,后方提交时会产生冲突
解决:
先git pull 获取最新
若两方修改的不是同一个地方(同一行),会自动合并
git push origin master 再推送上去即可
若两方修改的是同一个地方(同一行),pull合并时会产生冲突:
需要手动解决代码差异冲突:
解决后:
git本地分支
git branch dev : 创建分支
git branch -a:查看所有分支(包括本地和远程,一般来说都是一样的)
git checkout dev:切换到dev分支git checkout -b dev:创建分支并切换到当前
git checkout -b dev origin/dev :创建分支并切换到当前分支并追踪到远程分支dev
git branch -d dev merge之后,删除这个分支
本地合并,在dev上开发完以后,切换到master主分支,进行本地合并:
git merge dev 直接合并到本地master仓库了,当然工作区的也被合并了
git push origin master 然后推送就可以了
也可以远程合并, 在dev上:
git push origin dev
然后在gihub上进行merge到master 这个方法不推荐,还是推荐在本地merge
合并分支时产生冲突:
和上面的多方并发开发,后方提交时会产生冲突的情况一样,也是需要判断是否有冲突并进行手动处理
解决:同上,如有冲突,需要手动处理冲突部分,再push
git远程分支
git push origin dev 推送当前分支时,自动创建远程分支dev
git branch --set-upstream-to=origin/dev 分支 'dev' 设置为跟踪来自 'origin' 的远程分支 'dev',方便pull
其他指令
git diff HEAD main.cpp 查看main.cpp修改了哪些部分
git fetch : 远程 拉取到 本地:不自动合并
git branch -vv 查看本地分支和远程分支的追踪关系
2-2:本地关联到已创建的远程github仓库
echo "this is a readme" > README.md
git add . 提交到暂存区(未跟踪状态 -》 未被提交)
git commit -m "first" 提交到本地仓库()
在github上手动创建名为test仓库:test.git
git remote add origin https://github.com/daishiqiang123/test.git:连接远端仓库(ssh链接也可以),orige为远程仓库
//git remote remove origin
git remote -v :查看本地仓库对应的远程仓库名
//git branch -M main:创建新的分支,我的默认是master
git push -u origin master // -u:为当前分支master设置上游仓库origin,以后push时就可以不用给出了
输入邮箱名
输入token
token获取
如何知道token呢?步骤如下:
如果有:classic,就选classic那个
选择要授予此令牌token的范围或权限。
要使用token从命令行访问仓库,请选择repo。
要使用token从命令行删除仓库,请选择delete_repo
其他根据需要进行勾选
如果使用ssh
获取公私钥
将这里面文件的内容复制到github上
ssh -T git@github.com 查看连接是否正常,如果successful即成功,说明也可以用ssh进行clone传输了