Git global setup
git config --global user.name "kou"
git config --global user.email "kou@qq.com"
Create a new repository
git clone http://git/ui.git
cd ui
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
Push an existing folder
cd existing_folder
git init
git remote add origin http://git/ui.git
git add .
git commit -m "Initial commit"
git push -u origin master
Push an existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin http://git/ui.git
git push -u origin --all
git push -u origin --tags
一、克隆远程库
- 克隆远程库
git clone git@**.git
拉取远程库所有分支,可以通过git branch -a 查看分支,然后检出指定分支 git checkout develop 检出develop分支
- 克隆远程库指定分支
git clone -b develop git**.git - 连接远程库
git remote add origin git**.git
二、分支
- 查看远程库信息
git remote -v
oss3 为远程库在本地库的别名,默认origin - 查看本地库分支
git branch -a
- 检出远程库分支
git checkout -b test oss3/test - 创建本地分支(从当前分支进行创建),并切换分支
git checkout -b dev - 提交信息到远程仓库分支
git push origin dev - 显示远程库信息
git remote show oss3
- git已经删除了远程分支,本地仍然能看到
git remote prune origin
使用 git branch -a 命令可以查看所有本地分支和远程分支,发现很多在远程仓库已经删除的分支在本地依然可以看到。
使用命令 git remote show origin,可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息。
此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用 git remote prune origin 命令:
这样就删除本地那些远程仓库不存在的分支。
三、tag
- 查看所有tag
git tag - 创建tag
git tag [-a] 创建tag
git tag 'v.1.1' 创建轻量级标签v.1.1
git tag -a v1.1 -m 'test' 创建含附注型的标
- git tag -d [tag名称] 删除tag
git tag -d v.1.1
- 将标签推送远程服务器 git push origin [tagname] 推送指定标签
- 如果要一次推送所有本地新增的标签上去,可以使用
--tags
选项
git push origin --tags
- 删除本地tag,并更新到远程库
git push oss3-ui :refs/tags/【tag名】
- 删除所有本地tag
git tag -l | xargs git tag -d
- git 如何同步本地tag与远程tag
问题场景:
同事A在本地创建tagA并push同步到了远程->同事B在本地拉取了远程tagA(git fetch)->同事A工作需要将远程标签tagA删除->同事B用git fetch同步远端信息,git tag后发现本地仍然记录有tagA
分析:对于远程repository中已经删除了的tag,即使使用git fetch --prune,甚至"git fetch --tags"确保下载所有tags,也不会让其在本地也将其删除的。而且,似乎git目前也没有提供一个直接的命令和参数选项可以删除本地的在远程已经不存在的tag(我目前是没找到有关这类tag问题的git命令~~,有知道的同学可以告知我下,互相进步)。
解决方法:
git tag -l | xargs git tag -d #删除所有本地tag
git fetch origin --prune #从远程拉取所有信息
#查询远程tags的命令如下:
git ls-remote --tags origin
四、submodule
Git Submodules 允许你在一个 Git 仓库中引用另一个 Git 仓库,作为其子目录
# 添加子模块
# 在主项目中添加子项目,URL为子模块的路径,path为该子模块存储的目录路径
git submodule add [repository_url] [path]
# 克隆含有子项目的主项目
git clone [repository_url]
# 递归的方式克隆整个项目
git clone <repository> --recursive
# 当你在克隆这样的项目时,默认会包含该子项目的目录,但该目录中还没有任何文件
# 初始化本地配置文件
# 初始化子模块
git submodule init
# 从当前项目中抓取所有数据并检出父项目中列出的合适的提交
# 更新子模块
git submodule update
# 等价于git submodule init && git submodule update
git submodule update --init
# 自动初始化并更新仓库中的每一个子模块,包括可能存在的嵌套子模块
git clone --recurse-submodules [url]
# 拉取所有子模块
git submodule foreach git pull
五、多仓库
当本地关联多个仓库时,可能需要将仓库1数据推送到仓库2,保证数据一致
1、先克隆git仓库1
git clone http://git1.git
2、添加远程仓库2
命令:
git remote add <远程仓库名> <Git URL>
添加仓库2:
git remote add company http://git2.git
3、查看已添加的远程仓库
git remote -v
4、拉取远程仓库代码(公司仓库)[甲方远程分支不存在,存在执行5]
命令:
git pull <远程仓库名>
或
git pull <远程仓库名> <远程分支名>
拉取git2代码:
git pull company
5、如果git1分支已存在,检出分支,然后从另一个仓库拉取数据
检出git1分支:
git checkout server
拉取git2分支代码:
git pull company server
检出指定远程仓库指定分支
git checkout -b <远程分支名> <远程仓库名>/<远程分支名>
git checkout -b server company/server
6、推送到指定远程仓库指定分支
命令:
git push <远程仓库名> <本地分支名>:<远程分支名>
推送到git1仓库server分支:
git push origin server:server
7、删除分支
删除本地分支命令:
git branch -D <分支名>
git branch -D server
删除远程分支命令:
git push <远程仓库名> --delete <远程分支名>
git push origin --delete server
8、合并分支
命令:
git merge <分支名>
将master合并到当前分支
git merge master