
No more than code.
echo "# 项目名" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin http:~~~ // 链接到本地仓库
git push -u origin master // 将本地库推送到 master 分支
git push origin master --force // 强制提交
git clone http://username:password@remote
例用户名是abc@qq.com,密码是abc123456,git地址为git@xxx.com/www.git
执行git clone http://abc@qq.com:abc123456@git.xxx.com/www.git
执行报错:
fatal: unable to access 'http://abc@qq.com:abc123456@git.xxx.com/www.git/':
Couldn't resolve host 'qq.com:abc123456@git.xxx.com'
报错原因是因为用户名包含了@符号,所以需求要把@转码一下
<?php $userame=’abc@qq.com’; echo urlencode($userame); ?> abc%40qq.com
@符号转码后变成了%40,所以只需在clone时将username变为abc%40qq.com即可,再次执行就ok
fatal: unable to access '***.git/': Failed to connect to 127.0.0.1 port 8087: Connection refused
问题原因:git 可能被代理,查看是否使用代理 git config --global http.proxy
解决:取消代理 git config --global --unset http.proxy
Failed to connect to github.com port 443: Operation timed out
$ git config –global user.name “username” $ git config –global user.email “email”
master 分支
master 为主分支,也是用于部署生产环境的分支,确保 master 分支稳定性 master 分支一般由 develop 以及 hotfix 分支合并,任何时间都不能直接修改代码
develop 分支
develop 为开发分支,始终保持最新完成以及 bug 修复后的代码 一般开发的新功能时,feature 分支都是基于 develop 分支下创建的
feature 分支
开发新功能时,以 develop 为基础创建 feature 分支 分支命名: feature/ 开头的为特性分支, 命名规则: feature/user_module、 feature/cart_module
release分支
release 为预上线分支,发布提测阶段,会release分支代码为基准提测
当有一组feature开发完成,首先会合并到develop分支,进入提测时,会创建release分支。
如果测试过程中若存在bug需要修复,则直接由开发者在release分支修复并提交。
当测试完成之后,合并release分支到master和develop分支,此时master为最新代码,用作上线。
hotfix 分支
分支命名:hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似 线上出现紧急问题时,需要及时修复,以 master 分支为基线,创建 hotfix 分支,修复完成后,需要合并到 master 分支和 develop 分支
———————————常见任务———————————
(dev)$: git checkout -b feature/xxx # 从dev建立特性分支
(dev)$: git merge feature/xxx --no-ff # 把特性分支合并到dev
(master)$: git checkout -b hotfix/xxx # 从master建立hotfix分支
(master)$: git merge hotfix/xxx --no-ff # 把hotfix分支合并到master,并上线到生产环境
(dev)$: git merge hotfix/xxx --no-ff # 把hotfix分支合并到dev,同步代码
(release)$: git merge dev --no-ff # 把dev分支合并到release,然后在测试环境拉取并测试
(master)$: git merge release --no-ff # 把release测试好的代码合并到master,运维人员操作
(master)$: git tag -a v0.1 -m '部署包版本名' #给版本命名,打Tag
详见:Git分支管理策略
Git 是一个内容寻址文件系统,也就是说它实际上是一个键值对数据库(key-value data store)。Git 存储一份数据,然后返回一个40位的 Hash 值作为键值,通过这个键值,我们就能找到所存储的数据。
详见:Git存储数据的原理
先看图:
sourceTree 中 revert 译为提交回滚
,作用为忽略你指定的版本,然后提交一个新的版本。新的版本中已近删除了你所指定的版本。
reset 为 重置到这次提交,将内容重置到指定的版本。git reset
命令后面是需要加2种参数的:–-hard
和 –-soft
。这条命令默认情况下是 -–soft
。
执行上述命令时,这该条commit号之 后(时间作为参考点)的所有commit的修改都会退回到git缓冲区中。使用git status
命令可以在缓冲区中看到这些修改。而如果加上-–hard
参数,则缓冲区中不会存储这些修改,git会直接丢弃这部分内容。可以使用 git push origin HEAD --force
强制将分区内容推送到远程服务器。
代码回退
默认参数 -soft
,所有commit的修改都会退回到git缓冲区
参数--hard
,所有commit的修改直接丢弃
$ git reset --hard HEAD^ 回退到上个版本
$ git reset --hard commit_id 退到/进到 指定commit_id 推送到远程
$ git push origin HEAD --force
版本穿梭
当你回滚之后,又后悔了,想恢复到新的版本怎么办?
用git reflog
打印你记录你的每一次操作记录
$ git reflog
输出:
c7edbfe HEAD@{0}: reset: moving to c7edbfefab1bdbef6cb60d2a7bb97aa80f022687
470e9c2 HEAD@{1}: reset: moving to 470e9c2
b45959e HEAD@{2}: revert: Revert "add img"
470e9c2 HEAD@{3}: reset: moving to 470e9c2
2c26183 HEAD@{4}: reset: moving to 2c26183
0f67bb7 HEAD@{5}: revert: Revert "add img"
找到你操作的id如:b45959e
,就可以回退到这个版本
$ git reset --hard b45959e
ls =>查看当前文件夹中的目录 mkdir ‘自定义文件夹名’ =>创建一个新的子文件夹 pwd =>显示当前文件夹的路径
保存本地拉取最新,手动merge
手动解决冲突: pull 内容 -> Updated upstream 和 ===== 之间 本地修改的内容 -> ==== 和 stashed changes 之间 编辑冲突文件,删除冲突标记,自定确定需要内容后提交代码
回退更新
git rm –cached txt.txt 若报错:fatal: not removing ‘xxx/xxx’ recursively without -r 解决:git rm -r –cached txt.txt
问题:提交6次 feature-1 至 feature-6,执行强制回滚:git reset --hard 2216d4e
,回滚到了feature-1 上,并且回滚的时候加了–hard,导致之前 feature-2 到 feature-6 的所有代码全部没了,小白还在这个基础上新添加了一个 commit 提交,信息叫 feature-7。请问 如何把丢失的代码 feature-2 到 feature-6 全部恢复回来,并且 feature-7 的代码也要保留?
git cherry-pick 会获取某一个分支的单笔提交,并作为一个新的提交引入到当前分支上。
这时候要记好两个值:4c97ff3和cd52afc,他们分别是feature-7 和 feature-6 的 hash 码。然后执行回滚,回到feature-6上:git reset --hard cd52afc
回到了feature-6上,但是feature-7没了,如何加上来呢?
git cherry-pick 4c97ff3
期间可能会有一些冲突,按照提示解决就好,feature-1 到 feature-7的代码就合并到了一起,以前的代码也都回来了。628221deda4c47751cd8861db0a1692517cc555b - bookmarks
Git 分支管理策略 | Git Book | |
Git Cheat Sheet | Git使用入门教程(全) | git可视化入门教程 |