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技能树总结的更多相关文章

  1. ctfhub技能树—信息泄露—git泄露—index

    打开靶机 查看页面信息 使用dirsearch进行扫描 使用githack工具处理git泄露情况 使用git log命令查看历史记录 与 add flag 9b5b58-- 这次提交进行比对 即可拿到 ...

  2. ctfhub技能树—信息泄露—git泄露—Stash

    打开靶机环境 查看页面内容 使用dirsearch进行扫描 使用Githack工具处理git泄露情况 进入.git/refs目录 发现stash文件,使用notepad++打开文件 使用git dif ...

  3. ctfhub技能树—信息泄露—git泄露—Log

    什么是git泄露? 当前大量开发人员使用git进行版本控制,对站点自动部署.如果配置不当,可能会将.git文件夹直接部署到线上环境.这就引起了git泄露漏洞. 打开靶机环境 查看网页内容 使用dirs ...

  4. PHP开发工程师-技能树

    参考进阶-PHP程序员的技术成长规划-http://blog.csdn.net/heiyeshuwu/article/details/40098043 LNMP / LAMP 环境搭建(单组件安装,非 ...

  5. Git基础及进阶-系统总结

    Git基础及进阶-系统总结 by 小强 2019-07-01 考虑到入职后不仅需要熟练掌握git的基本使用,在企业实际操作中还涉及一些进阶指令.作为一个程序员,熟练使用工具是一项基本技能,也是程序员的 ...

  6. Git 子模块 - submodule

    有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...

  7. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  8. Git与Repo入门

    版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...

  9. Git Bash的一些命令和配置

    查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...

  10. 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net

    1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...

随机推荐

  1. JAVA 进阶完结

    1.接口 这个类中 有了新的关键字 abstract 并且里面的方法没有括号 这样的类 上图就是 抽象函数与抽象类 那么继承抽象类的子类需要做什么工作呢 2.代码编写的思路 3.接口 接口跟抽像类的很 ...

  2. ctfshow_web入门 文件包含 学习

    文件包含 额,这是一个做题带学习的一个笔记 算是半做题,半学习的笔记吧,所以能写的方法和注解都会写.难免先得啰嗦 由于截图都是白色背景,所以使用夜间模式(右上角哦~)观看比较易于区分图片与浏览器背景 ...

  3. JZOJ 【2020.11.30提高组模拟】剪辣椒(chilli)

    题目大意 给出一棵 \(n\) 个节点的树,删去其中两条边 使得分出的三个子树大小中最大与最小的差最小 分析 先一边 \(dfs\) 预处理出以 \(1\) 为根每个点的 \(size\) 然后按 \ ...

  4. redis(4)String字符串

    前言 Redis中有5大数据类型,分别是字符串String.列表List.集合Set.哈希Hash.有序集合Zset,本篇介绍Redis的字符串String Redis字符串 String是Redis ...

  5. HACLABS: NO_NAME

    HACLABS: NO_NAME 目录 HACLABS: NO_NAME 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.2.1 目录分析 2 命令注入利用 2.1 尝试反弹Shell 2. ...

  6. PostGIS之地理坐标

    1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...

  7. 轻量级CI/CD发布部署环境搭建及使用_03_docker安装harbor

    轻量级CI/CD发布部署环境搭建及使用_03_docker安装harbor 授人以鱼不如授人以渔,如果说的别人都没明白,说明自己实际也不是太明白   1,下载docker-compose sudo c ...

  8. LeetCode-1705 吃苹果的最大数目

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-number-of-eaten-apples 题目描述 有一棵特殊的苹果树,一连 ...

  9. 如何在 JavaScript 中使用媒体查询

    前言 说起媒体查询想必大家最先想到的都是CSS中@media,没错,这是我们最常用的媒体查询方法,主要用来为我们的网站做适配处理. 比如: h1 { font-size: 2rem; color: g ...

  10. ChatGpt聊天API使用

    昨天ChatGpt发布了聊天API,新增了两个模型,目前还是测试阶段 gpt-3.5-turbo 功能强大的GPT-3.5模型,专门针对聊天做了优化 gpt-3.5-turbo-0301 此模型只支持 ...