Git入门
Git入门
本地git初始化
git仓库初始化
![](https://img-blog.csdnimg.cn/direct/ff8cd33f969c4451b9762df43e101071.png)
shell
mkdir myrepo # 创建仓库文件夹
cd myrepo/ # 进入目录
git init # 初始化git仓库 (创建.git文件夹)
git branch -a # 查看分支 (此时无分支)
touch README.md # 创建一个文件
git add . # 将所有文件添加到暂存区
git commit -m "init" # commit一下
git branch # 此时查看分支, 默认为master分支
创建远端仓库
github
![](https://img-blog.csdnimg.cn/direct/d449f924dbd14f2da09d717497278130.png)
gitee
![](https://img-blog.csdnimg.cn/direct/34a47a6478e243edbd3cdf630181a257.png)
此处我创建了两个远端仓库, 方便后面演示(工作中基本都是1个)
指定远端仓库
注意配置ssh公钥, 自行搜索
github ssh: git@github.com:dengwangtao/git_demo.git
gitee ssh: git@gitee.com:TAOTAO_D/git_demo.git
![](https://img-blog.csdnimg.cn/direct/6f2917a23f5b409aa99569c3e78826dd.png)
shell
# git remote add [起个名, 一般都叫origin] [remote 地址]
git remote add origin git@github.com:dengwangtao/git_demo.git
推送至远端
![](https://img-blog.csdnimg.cn/direct/fb6cda78dc31401bacb67f19128bae21.png)
shell
git push origin master:master
# 将master分支推送到origin的master分支(github)
![](https://img-blog.csdnimg.cn/direct/eed16810f5dd4111823ba8cc22fcfaf2.png)
可以看到, 只有github的仓库被推送了
then, 推送到gitee
![](https://img-blog.csdnimg.cn/direct/028ba868ffcc42e0b1110d64e8c4d584.png)
shell
git push origin2 master:master
# 将master分支推送到origin2的master分支 (gitee)
查看远端仓库
![](https://img-blog.csdnimg.cn/direct/97d575dfe3c149878471b94e4691c173.png)
多分支
![](https://img-blog.csdnimg.cn/direct/038634e255a3474eae02d6122411b69d.png)
shell
# 创建了两个分支 dev 和 feature
git branch dev
git checkout -b feature # 创建分支并切换到新分支
![](https://img-blog.csdnimg.cn/direct/e53d28dfc38a461b8cbe12f043dde3f1.png)
在feature分支中创建一个main.cpp文件, 并推送到github
![](https://img-blog.csdnimg.cn/direct/7b73bc586037466d93046014ca7493a8.png)
查看git log
![](https://img-blog.csdnimg.cn/direct/815e62c232314c8cbed3dd6cbe46c707.png)
将feature分支合并至dev分支
![](https://img-blog.csdnimg.cn/direct/cce8fc6d541945638bd2bf2ba07643c9.png)
shell
git checkout dev
git merge feature
git push origin dev:dev
只将dev分支推送到gitee
![](https://img-blog.csdnimg.cn/direct/3b95dd48478e4b90b0d37f723d1983ab.png)
其他开发者
![](https://img-blog.csdnimg.cn/direct/1ddb55c490444daead513a006339de93.png)
shell
# 克隆仓库, 并放在myrepo2文件夹
git clone git@github.com:dengwangtao/git_demo.git myrepo2
查看分支
![](https://img-blog.csdnimg.cn/direct/39b776df12444631ab52842b0c7ca906.png)
有多个远程仓库, 假设目前的需求: 更新dev分支的main.cpp, 输出"Hello Git"
- 创建 feature_main 分支
- 修改main.cpp, 验证并测试
- 合并到dev分支
- 推送 (解决冲突)
![](https://img-blog.csdnimg.cn/direct/59cedb7f983842988761cac21187357f.png)
此处基于远端的dev分支创建了feature_main分支, 并更新了main.cpp的代码
并提交到本地, 注意, 此时还没有推送到远端
为了演示解决冲突, 手动在github上修改代码
cpp
// 修改前
#include <iostream>
int main() {
std::cout << "Hello World" << std::endl;
return 0;
}
cpp
// 修改后
#include <iostream>
int main() {
std::cout << "This is https://github.com/dengwangtao/git_demo/edit/dev/main.cpp" << std::endl;
return 0;
}
然后, 此时提交代码前, 需要pull (fetch + merge)
![](https://img-blog.csdnimg.cn/direct/188c27fe36394aa0b67ef2907b4edbf5.png)
合并分支, 发生冲突
![](https://img-blog.csdnimg.cn/direct/3b04c4314791448cac6d3fbace3f38fa.png)
查看main.cpp
![](https://img-blog.csdnimg.cn/direct/456ec12414774d7dae0cd38987c83fe3.png)
解决冲突
![](https://img-blog.csdnimg.cn/direct/ef8d9e1770cf4f13985d8b6b033e7887.png)
![](https://img-blog.csdnimg.cn/direct/5d4f6dbfeb014b1181801f9b35fc902a.png)
![](https://img-blog.csdnimg.cn/direct/19f54e43c73b468191f55febb03f0b35.png)