git技能树总结
1. git简介
版本控制:
指的是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制系统发展可分三个阶段:本地版本控制系统 -> 集中式版本控制系统 -> 分布式版本控制系统。
2.git安装
打开git官方网站(https://git-scm.com/download/win)选择相应的版本下载即可。
git环境配置:
通常情况下,只需配置一次git,当git程序升级时会保留配置信息。不过可以运行 git config 命令来修改。
git config 命令配置用户信息:
git config --global user.name 'wl'
git config --global user.email 'wl@qq.com'
注意: 如果使用了 --global选项,意味着是全局配置。如果想在特定项目中使用不同的用户名称,可以在那个项目目录下运行没有--global
选项的命令来配置。
查看配置信息: git config --list
也可使用 git config <key> 查看某一项配置,eg: git config user.name
git颜色配置: git config --global color.ui true
git忽略文件配置: 在工作区根目录下创建一个 .gitignore 文件,然后把要忽略的文件名填进去即可。
1. 忽略文件规则如下:
.gitignore文件
# xx:
//排除所有.开头的隐藏文件
.*
// 排除所有.js文件
*.js
//不排除.gitignore 和 remember.class:
!.gitignore
!.remember.class
2.强制添加被忽略的文件 git add -f xx.js
3.把指定文件排除在 .gitignore 规则外的写法是: !+文件名
git配置别名:
git config --global wl.co checkout
git config --global wl.ci commit
git config --global wl.br branch
最后输入:git ci -m 'sth.'
配置git log -1:
配置一个git last,显示最后一次提交信息:
git config --global wl.last 'log-1'
然后输入: git last 就可以显示最近一次提交记录。
3.git使用
在文件目录中初始化仓库: git init
克隆仓库: git clone <url>
自定义本地仓库名称: git clone <url> newName
编辑并添加文件:
创建一个index.txt文件,内容如下:
hello git;
hello world;
把文件添加到仓库: git add index.txt
提交更改到仓库: git commit -m '创建了一个index.txt文件'
查看git仓库当前状态变化:
接下来继续修改index.txt文件,如下:
hello git;
hello world;
hello everyone;
查看git status结果: git status
比较变动: git diff index.txt
查看日志: git log --pretty=oneline**
查看全部commit记录: git log
git 回退:
git reset --hard HEAD^ (回退到上一个版本)
git reset --hard HEAD^^(回退到上上个版本)
git reset --hard HEAD~10 (回退到10个版本之前)
git 重置:
记录每一次命令:git reflog ,通过这个命令找到对应的commitid,然后使用 git reset --hard commitId 切换到最新的版本上了。
工作区和暂存区:
工作区:就是用户电脑里能看到的目录;
版本库: 工作区有一个隐藏目录 .git。
git版本库里存放了很多东西,其中最重要的就是称为 stage(或者叫index)的暂存区,还有git自动创建的第一个分支master,以及指向
master的一个指针叫HEAD。
即:当把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,即把文件修改添加到暂存区;
第二步是用git commit提交更改,即把暂存区的所有内容提交到当前分支。
4.版本管理
撤销修改 (git commit --amend):
当我们提交文件完后发现漏掉了几个文件未提交,或者提交信息写错了,此时,就可以运行带有 --amend选项的命令来重新提交
使用场景:
git add index.txt
git commit -m 'commit index.txt'
git add forgot.txt
git commit --amend
结果是:最终只会有一个提交(第二次提交将代替第一次提交的结果)。
取消暂存的文件(git reset):
git reset HEAD readme.txt
撤销对文件的修改(git --checkout):
git checkout -- index.txt
显示结果: 文件中的修改已经被撤销了。
删除文件:
使用 rm 命令删除: rm index.txt
或者先用 git rm index.txt 再使用 rm index.txt 命令删除即可
特殊情况,把误删的文件恢复到最新版本: git checkout -- index.txt
5.分支管理
完成提交代码分支流程:
1.首先,创建dev分支,然后切换到dev分支:
git checkout -b dev
2.使用 git branch 命令查看当前分支:
git branch
3.在dev分支上面做修改并提交:
git add readme.txt
git commit -m 'xxx'
4.现在切换到 master分支:
git checkout master
5.把dev分支的代码合并到master分支上:
git merge dev
[git merge 命令用于合并指定分支到当前分支。]
6.合并完成后,可以删除dev分支了:
git branch -d dev
7.删除后,查看branch,
git branch
由于切换分支使用 git checkout <branch>,而撤销修改则是 git checkout -- <file>,tong
创建并切换到新的dev分支,可以使用:
git switch -c dev
直接切换到已有的master分支,可以使用:
git switch master
合并dev分支,添加 --no-ff 参数,表示禁用 Fast forward:
git merge --no-ff -m 'merge with no-ff' dev(因为本次合并要创建一个新的commit,所以加上-m参数)
分支策略:
master分支-应该是非常稳定的,仅用来发布新版本。
dev分支-开发需求都在dev分支
feature分支-开发新功能
bug分支-每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
场景描述:假设正在dev开发功能,突然需要修改master分支bug,这时需要 把dev分支的代码储藏起来,用的命令
是 git stash; bug修复后,切回dev分支,使用 git stash pop 把储藏的代码放出来,然后就可以继续开发了.
git stash list: 查看储藏的文件区域
git stash apply stash@{0}: 可以多次stash,恢复的时候,想用git stash list查看,然后恢复指定的stash
git cherry-pick: 对于多分支代码库,将代码从一个分支转移到另一个分支上。
分两种情况,第一种是另一个分支的所有代码变动,就采用合并 git merge.
另一种是,只需要部分代码变动(某几个提交),采用 cherry pick。
git cherry-pick <commitHash>
git cherry-pick转移多个提交:
git cherry-pick A..B(转移从A到B的所有提交。且必须按照正确的顺序放置,提交A必须早于提交B,否则命令
将失败,且提交A将不会包含在cherry pick中。)
git cherry-pick A^..B (包含提交A,转移从A到B的所有提交)
git cherrry-pick <HashA> <HashB> 将A和B两个提交应用到当前分支。
git cherry-pick代码冲突:
git cherry-pick --continue: 继续执行
git cherry-pick --abort: 发生代码冲突后,放弃合并,回到操作前的样子。
推送分支:
git push origin master: 将该分支推送到master分支上
rebase: rebase操作可以把本地未push的分叉提交历史整理成直线;目的是使得我们在查看历史提交的变化时更容易.
6.git标签
创建标签,切换到需要打标签的分支上:
git branch
git checkout master
git tag v1.0(使用 git tag <name>就可以打一个新标签)
git tag: 查看所有标签
默认标签是打在最新提交的commit上的。如果忘了打标签,可以先找到历史提交的 commit id,然后使用
git tag v0.9 commit-id 即可。
如果标签打错了,使用 git tag -d v0.1 删除即可。
如果要推送某个标签到远程,使用命令 git push origin <tagname>:
git push origin v1.0
或者,一次性推送全部尚未推送到远程的本地标签:
git push origin --tags
如果标签已经推送到远程,要删除远程标签,需要先从本地删除:
git tag -d remove
然后,从远程删除即:git push origin :refs/tags/remove
参考链接:
https://edu.csdn.net/skill/gml/gml-62c30f9c31f64a1d96af732c47c93f04?category=635
git技能树总结的更多相关文章
- ctfhub技能树—信息泄露—git泄露—index
打开靶机 查看页面信息 使用dirsearch进行扫描 使用githack工具处理git泄露情况 使用git log命令查看历史记录 与 add flag 9b5b58-- 这次提交进行比对 即可拿到 ...
- ctfhub技能树—信息泄露—git泄露—Stash
打开靶机环境 查看页面内容 使用dirsearch进行扫描 使用Githack工具处理git泄露情况 进入.git/refs目录 发现stash文件,使用notepad++打开文件 使用git dif ...
- ctfhub技能树—信息泄露—git泄露—Log
什么是git泄露? 当前大量开发人员使用git进行版本控制,对站点自动部署.如果配置不当,可能会将.git文件夹直接部署到线上环境.这就引起了git泄露漏洞. 打开靶机环境 查看网页内容 使用dirs ...
- PHP开发工程师-技能树
参考进阶-PHP程序员的技术成长规划-http://blog.csdn.net/heiyeshuwu/article/details/40098043 LNMP / LAMP 环境搭建(单组件安装,非 ...
- Git基础及进阶-系统总结
Git基础及进阶-系统总结 by 小强 2019-07-01 考虑到入职后不仅需要熟练掌握git的基本使用,在企业实际操作中还涉及一些进阶指令.作为一个程序员,熟练使用工具是一项基本技能,也是程序员的 ...
- Git 子模块 - submodule
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...
- Git 在团队中的最佳实践--如何正确使用Git Flow
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...
- Git与Repo入门
版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...
- Git Bash的一些命令和配置
查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...
- 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net
1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...
随机推荐
- Fiegn 声明式接口调用
五:Fiegn 声明式接口调用 什么是Fiegn Netfix,Fiegn 是一个提供模板式的Web Service客户端,使用Fiegn 可以简化Web Service 客户端的编写,开发者可以通过 ...
- Git常用指令集合🔥
关联文章:Git入门图文教程(1.5W字40图)--深入浅出.图文并茂 指令-查看状态信息 指令 描述 git --version 查看git版本 git status 查看本地仓库状态,比较常用的指 ...
- webgl 系列 —— 初识 WebGL
初识 WebGL 什么是 WebGL webgl 在支持 canvas 的浏览器中进行 2d 或 3d 渲染. webgl 程序除了有 Html.javascript,还需要加入着色器语言(GLSL ...
- 深度学习框架Pytorch学习笔记
由于工作原因,需要使用到深度学习pytorch框架,所以,跟随视频学习了深度学习框架的使用方法,视频链接如下: PyTorch深度学习快速入门教程(绝对通俗易懂!)[小土堆]_哔哩哔哩_bilibil ...
- sqlit 自增id为null
CREATE TABLE proejct( id UNSIGNED INTEGER AUTO_INCREMENT, name VARCHAR(50) NOT NULL, type CHAR(10) N ...
- Min_25 Sieve 学习笔记
这个东西不是人想的. 解决问题:积性函数前缀和. 适用条件:可以快速计算 \(f(p)\) 的前缀和,\(f(p^k)\) 可以被表示成若干完全积性函数的线性组合(指对应项可以快速组合出来). 时空复 ...
- Execution failed for task ':app:checkDebugDuplicateClasses'解决办法
A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable & ...
- Word11 工程学院讲师论文office真题
1.根据题目一的要求,打开素材文件,点击[文件]-[另存为],选择[当前文件夹],命名为Word. 2.根据题目二的要求,根据提供的参考样式,打开Word的文档,在[布局]里点击[页面设置]的右下角, ...
- Cisco——ASA和winserver2016配置l2tp over ipsec连接
Cisco--ASA和winserver2016配置l2tp over ipsec连接 L2tp over ipsec vpn配置 网络拓扑图: 配置vpn时要确保Winserver15能够ping通 ...
- cypress初探
long long ago就已经被各大公众号洗脑这款神奇的工具,那我们一起来学习下吧(基础入门安装,边学习边记录,勿喷谢谢) 第一步:访问官方网站:https://www.cypress.io/ 第二 ...