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. C++练习3 定义带默认值的参数

    通过void func 定义函数的默认值和其可以容纳多少个实参 1 #include <iostream> 2 using namespace std; 3 void func(int a ...

  2. js原型链污染详解

    前言 之前打某湖论剑,两道js的题,给我整懵逼了,发现以前都没对js做过多少研究,趁着被毒打了,先研究一波js原型链,未雨绸缪. 基础 protype 首先我们研究js原型链,得搞明白原型是什么,这里 ...

  3. 【KAWAKO】模型的压缩、扩张,计算模型的各种成本

    目录 模型压缩 量化 稀疏化训练 剪枝 知识蒸馏 自蒸馏 集成 使用精细化模型结构 模型扩张 深度 宽度 输入图像的分辨率 深度.宽度.分辨率联合扩张 使用精细化模型结构 计算模型的各种成本 参数量 ...

  4. LG P4213【模板】杜教筛(Sum)

    \(\text{Problem}\) 求 \[\sum_{i=1}^n \varphi(i) \] 和 \[\sum_{i=1}^n \mu(i) \] \(1 \le n < 2^{31}\) ...

  5. 题解 TSP 但是你有约束

    Description 给定一张带权完全图,求一条路径满足 不重复经过一个点. 在过点 \(i\) 时,\(1\cdots i - 1\) 要么全访问过,要么都没有访问过. 点数 \(n\) 有 \( ...

  6. axSpA患者新发炎症更容易发生在既往发生过炎症的区域

    axSpA患者新发炎症更容易发生在既往发生过炎症的区域 EULAR2015; PresentID: SAT0240 NEW INFLAMMATORY LESIONS IN AXIAL SPONDYLO ...

  7. Decompiling XAPK Files

    http://calebfenton.github.io/2016/02/28/decompiling-xapk-files/

  8. javaSE学习四

    Super /*super注意点: 1. super调用父类的构造方法,必须在构造方法的第一一个 2. super必须只能出现在子类的方法或者构造方法中! 3. super和this 不能同时调用构造 ...

  9. vue数组传值到后端

    const arrays= ["zhangsan","lisi"] 请求方式:GET vue前端: getDetailList({arrays:arrays}) ...

  10. linux开放指定端口

      sudo ufw allow 端口号