文章目录
● git是分为四部分:
① 一部分是你自己的文件,
② 缓存区:git add xx将修改保存到缓存区
③ 本地库:git comiit 是将本地修改保存到本地仓库中
④ 远程仓库:git push 将本地仓库修改推送到服务器上的仓库中
一、搭建远程仓库
通过命令行创建一个新的版本库
touch README.md
git init #1. 初始化项目
git add README.md #2. 添加到缓存区 -A(当前目录全部文件)
git commit -m "first commit" # 3. 提交git到版本库 -m是提交的注释
git remote add origin xxx.git # 4. 绑定远程仓库
git push -u origin master # 5. 推送
问题 :git push origin 与 git push -u origin master的区别
$ git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略。
$ git push 如果当前分支与多个主机存在追踪关系,那么这个时候-u选项会指定一个默认主机,
这样后面就可以不加任何参数使用git push。
$ git push -u origin master 上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,
后面就可以不加任何参数使用git push了。 不带任何参数的git push,默认只推送当前分支,这叫做simple方式。
此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支
参考: git push 本地项目推送到远程分支 git命令版.
通过命令行推送一个已存在的版本库
git remote add origin xxx.git
git push -u origin master
二、基本操作
1. git pull
git pull 命令用于从远程获取代码并合并本地的版本。
git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。 命令格式如下:
git pull <远程主机名> <远程分支名>:<本地分支名>
实操:
# 基本的更新
$ git pull
$ git pull origin
#################################
# 将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。
git pull origin master:brantest
#如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin master
三、分支管理
1. 新建分支
① 从已有的分支创建新的分支(如从master分支), 创建一个dev分支,并切换到dev分支
git checkout -b dev
② 创建完可以查看一下,分支已经切换到dev (会列出所有分支,当前分支的面会有一个*号)
git branch
也可手动切换到 dev分支
git checkout dev
③ 提交该分支到远程仓库
git push origin dev
2. 拉取分支
① 把远程分支拉到本地,dev为远程仓库的分支名
git fetch origin dev
② 在本地创建分支dev并切换到该分支
(本地分支名称) (远程分支名称)
git checkout -b dev origin/dev
③ 把某个分支上的内容都拉取到本地
git pull origin dev(远程分支名称)
3. 提交分支
① 首先切换到dev分支上,进行提交推送
git checkout dev
② 推送到dev分支上
git add .
git commit -m ‘dev'
git push -u origin dev
4. 合并分支
① 首先切换到master分支上
git checkout master
② 如果是多人开发的话 需要把远程master上的代码pull下来
git pull origin master
③ 把dev分支的代码合并到master上
git merge dev
④ push到远程master上
git push origin master
5. 删除分支
① 删除本地分支:
git branch -d dev
② 删除远程分支:
git push remote_name -d remote_branch_name
如下:
git branch -a
查看所有分支,包括远程分支
6. 分支改名
参考: git修改分支名称
假设分支名称为oldName, 想要修改为 newName
① 本地分支重命名(还没有推送到远程)
git branch -m oldName newName
② 远程分支重命名 (已经推送远程-假设本地分支和远程对应分支名称相同)
# a. 重命名远程分支对应的本地分支
git branch -m oldName newName
# b. 删除远程分支
git push --delete origin oldName
# c.上传新命名的本地分支
git push origin newName
# d.把修改后的本地分支与远程分支关联
git branch --set-upstream-to origin/newName
c、d合并:
git push -u origin newName
如果已经关联了远程分支,要先解除关联才可以:
git branch --unset-upstream
7. 查看分支合并图
git log --graph
学习参考:git 合并分支和提交的步骤
四、标签管理
通常,发布一个版本时,会在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
简单理解:标签是某个版本的别名,因为Git的版本号都是用一串字母数字组成,为了便于管理,Git 可以给版本取个别名(也就是打上标签,比如标签的名字叫做 v1.0.0)。
学习参考:Git 标签管理(创建标签、操作标签)
打标签:git tag 标签名
查看所有标签:git tag
指定commit id打标签:git tag 标签名 commitID
指定标签信息:git tag -a 标签名 -m “标签信息”
切换到指定标签: git checkout 标签名
查看说明文字:git show 标签名
1.推送标签
●推送标签到远程:git push origin 标签名
●一次性推送全部尚未推送到远程的本地标签: git push origin --tags
2. 删除标签
●先本地删除: git tag -d 标签名
再从远程删除:git push origin :refs/tags/xxx
五、版本恢复
● 回退版本
#查看提交的序号,也可以直接在服务器看文件
git log
#记得先提交保存,
git reset --hard xxx
#此时如果用 “git push” 会报错,因为我们本地库HEAD指向的版本比远程库的要旧:
git push -f #强推
● mixed 、soft 、hard 参数
git reset [--soft | --mixed | --hard] [HEAD]
--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
--soft 参数用于回退到某个版本
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
五、Git 下载代理等
# 常用下载指令
git clone -b v4.1.3 https://github.com/mavlink/qgroundcontrol.git --recursive
# 更新子目录:
git submodule update
# socks5协议,1080端口修改成自己的本地代理端口
git config --global http.proxy 'socks5://127.0.0.1:10808'
git config --global https.proxy 'socks5://127.0.0.1:10808'
# http协议,1081端口修改成自己的本地代理端口
git config –global http.proxy http://127.0.0.1:1081 # 'http://127.0.0.1:10808'
git config –global https.proxy https://127.0.0.1:1081
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
# 查看所有配置
git config -l
六、常见报错
如下报错:
出错原因:
出现此种错误的原因是,在当前的 git 的项目中,存在其中的子文件夹隶属于别的git项目地址,即存在git文件夹。具体见下图:
解决方案:
解决方案也是一目了然,即 删除子文件夹中的git目录即可,也就是去掉其他git地址对子文件夹内容的追踪,有一个取巧的办法是,如果仍然想要保留子文件夹原git的地址,可以将原来的git文件夹中config拷贝出来保留下来,里面有git原地址相关信息。