获取仓库
获取仓库的两种方式
- 1.将没有进行版本控制的本地目录转换为git仓库;
- 2.从远程仓库 克隆(git clone)一个git仓库
在本地目录初始化仓库
# 切换到项目目录下
# 初始化仓库,会在项目目录下生成一个 .git的文件夹
git init
克隆现有仓库
# 从远程仓库克隆
# 会在当前目录下创建一个名字为 elastic 的文件夹,在elastic目录下包含一个 .git文件夹(包含git所有内容,后边详细介绍 .git)
git clone <url>
git clone ssh://git@gitlab.hangjia.online:10022/yuanchaohu/elastic.git
远程仓库
# 查看远程仓库信息
git remote (只能看到添加远程分支时设置的别名)
git remote -v (查看详细信息,别名、远程仓库地址)
# 查看某个远程仓库信息
git remote show 远程仓库别名
# 例:查看远程仓库 origin
[root@bogon elastic]# git remote show origin
* 远程 origin
获取地址:ssh://git@gitlab.hangjia.online:10022/yuanchaohu/elastic.git
推送地址:ssh://git@gitlab.hangjia.online:10022/yuanchaohu/elastic.git
HEAD分支:master
远程分支:
master 已跟踪
为 'git pull' 配置的本地分支:
master 与远程 master 合并
为 'git push' 配置的本地引用:
master 推送至 master (可快进)
# 添加远程仓库
git remote add 仓库别名 仓库url
# 删除远程仓库
git remote rm 仓库别名
# 远程仓库重命名
git remote rename 原名 新名
本地分支
# 查看本地分支,可以看到当前所在分支 (* 分支名;-v / -vv 可查看 一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有)
git branch [-v]/[-vv]
# 创建本地分支 dev
# 创建新分支会在当前所在的提交对象上创建一个指针,比如说最开始clone后只有master分支,新创建了一个dev分支
# 这时master和dev都会指向相同的提交记录(提交历史),并且现在还是在master分支上(不会自动切换到新建分支上)
# git 通过 HEAD(一个特殊的指针,一直指向本地所在的分支)确定当前所在分支
git branch dev
# 创建分支并切换到该分支
git checkout -b dev
# 删除本地分支 dev
# 不能删除当前所在分支,如果要删除当前所在分支,先切换到其他分支
git branch -d dev
# 切换本地分支,切换分支时 HEAD 指向切换的分支
git checkout dev
# 查看分叉历史(多个分支进行了不同的工作后会产生分叉,在合适的时候将分支进行合并)
git log --oneline --decorate --graph --all
分支切换会改变你工作目录中的文件
在切换分支时,一定要注意你工作目录里的文件会被改变。 如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。 如果 Git 不能干净利落地完成这个任务,它将禁止切换分支。
远端分支
# 查看远端仓库信息
git remote (只显示远程仓库简称/别名)
git remote show origin (显示远程origin详细信息)
# 列出远程仓库和分支信息
git ls-remote
# 例:
[root@bogon elastic]# git ls-remote
From ssh://git@gitlab.hangjia.online:10022/yuanchaohu/elastic.git
7317a65f6917d8dbf05a3216cec834844b5242c9 HEAD
7317a65f6917d8dbf05a3216cec834844b5242c9 refs/heads/dev
7317a65f6917d8dbf05a3216cec834844b5242c9 refs/heads/master
# 修改上游分支
git branch -u origin/dev
# 删除远程origin仓库的 dev分支
git push origin --delete dev
合并分支
# 使用 git status 可查看有冲突的文件
git status
# 合并分支
git merge <分支名>
# 例:切换到dev分支修改了README.md,git commit 提交到本地
# 然后切换回master分支,使用 git merge dev和并dev分支后就能看到在dev分支修改后的内容
# 遇到冲突时的分支合并
# 例:如果在不同的分支对同一个文件修改了统一部份代码或内容,合并分支的时候就会提示冲突
# 此时应该解决冲突,然后 git add <文件名> ,标识冲突已解决,然后git commit 提交合并
# rebase
git rebase origin/<远端分支名>
拉取
# 抓取远端的数据 (origin为远程仓库的名字)
# 从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。 它只会获取数据然后让你自己合并。
git fetch origin
# git pull 相当于 gti tetch 然后 git merge
git pull
# 拉取远程origin仓库的dev分支到本地的dev分支(也可以理解为:创建本地分支并将分支建立在远程跟踪分支上)
# git checkout -b <本地分支名> <远程仓库名>/<远程仓库分支名>
git checkout -b dev origin/dev
# 将远程指定分支 拉取到本地的 指定分支上
git pull origin <远程分支>:<本地分支>
# 将远程指定分支 拉取到 本地当前分支
git pull origin <远程分支>
# 将远程的 feature_test 分支检出到本地 feature_test
git checkout -b feature_test origin/feature_test
跟踪分支:从一个远程跟踪分支检出一个本地分支会自动创建所谓的“跟踪分支”(它跟踪的分支叫做“上游分支”)。 跟踪分支是与远程分支有直接关系的本地分支。 如果在一个跟踪分支上输入 git pull,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。
提交
# 对项目下需要版本管理的的文件夹/文件 进行git 追踪(. 代表当前目录下所有文件夹和文件);
# 支持通配符 比如 (git add ./*.go)代表把当前目录下所有 .go 文件进行追踪
git add .
# 提交到git本地仓库
git commit -m "提交信息"
# git push 语法
git push <remote> <branch>
# 推送本地master 到远程仓库服务器的master分支 origin
git push origin master
# git push <远程仓库名> <本地分支名>:<远程仓库分支名> (如果没有指定的远程分支名,会新建远程分支)
# 例:把本地master分支 推送到远程仓库origin的dev分支上
git push origin master:dev