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. Istio 升级后踩的坑

    背景 前段时间我们将 istio 版本升级到 1.12 后导致现有的应用监控有部分数据丢失(页面上显示不出来). 一个是应用基础信息丢失. 再一个是应用 JVM 数据丢失. 接口维度的监控数据丢失. ...

  2. CF1781D 解题乱弹

    abc1057510554 老师说,搞这种数论题,就可以在 CF 上 number theory 板刷一个 1300-1900 就可以了. 然后发现连 1800 的题都做不出来,我可以退役力 QAQ ...

  3. Docker安装配置Oracle详细教程(以作持久化处理)

    Docker安装Oracle 1,拉取Oracle镜像,拉取成功后查看  docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11 ...

  4. Postgresql 全局索引与分区索引对于SQL性能影响的比较及DDL操作后分区全局索引是否会失效

    Postgresql 提供了对于分区表 global index 的支持.global index 不仅提供了对于唯一索引功能的改进(无需包含分区键),而且在性能上相比非global index (l ...

  5. 【深入浅出 Yarn 架构与实现】4-5 RM 行为探究 - 启动 ApplicationMaster

    本节开始,将对 ResourceManager 中一些常见行为进行分析探究,看某些具体关键的行为,在 RM 中是如何流转的.本节将深入源码探究「启动 ApplicationMaster」的具体流程. ...

  6. windows pwn(一)

    前言 前几天因为看CS shellcode装了一个win10虚拟机,然后正好因为逆向课老师要装一系列工具.于是就想起来之前一直想看的windows pwn,就顺便装了一下相关工具并且入门了一下. 工具 ...

  7. 【译】.NET 7 中的性能改进(十)

    原文 | Stephen Toub 翻译 | 郑子铭 最后一个有趣的与IndexOf有关的优化.字符串早就有了IndexOf/IndexOfAny/LastIndexOf/LastIndexOfAny ...

  8. LG8768 题解

    题意 传送门 求长度为 \(n\) 的序列 \(a\) 的个数对 \(998244353\) 取模的结果,其中 \(a\) 满足: \(a_1=w\) \(a_{i-1}+L\le a_i\le a_ ...

  9. 01.JavaSE学习

    一.java入门 java三大版本(write once,run anywhere) JavaSE:标准版(用于桌面开发,控制台开发) javaME:嵌入式开发(手机,小家电) javaEE:以jav ...

  10. Linux系统下追加记录到文件中的实例代码解读

    今日阅读Linux程序设计第四版,找到一个使用mmap函数的实例 问题描述 该程序主要定义一个结构体,随后利用mmap,msync以及munmap函数对其进行内容追加,定位以及修改内容的操作. 先自己 ...