Git学习笔记

安装Git

 

$ git

The program 'git' is currently not installed.You can install it by typing:sudo apt-get install git

$ git config --global user.name "YourName"

$ git config --global user.email"email@example.com"

 

创建版本库

 

初始化一个Git仓库,使用git init命令。

添加文件到Git仓库,分两步:

第一步,使用命令git add ,注意,可反复多次使用,添加多个文件;

第二步,使用命令git commit,完成

 

时光机穿梭

 

要随时掌握工作区的状态,使用git status命令。

如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

 

版本回退

 

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

 

远端回退

本地的master分支 reset到你相应的位置之后,在进行push的时候加上-f参数.
完整的命令是:git push-f origin master
push的时候,需要你有强制更新的权限(如果你们的git服务器有权限管理的话). 详细的含义你可以在命令行中输入 git push --help 查看.

 

工作区和暂存区

 

我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用“git add”把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用“git commit”提交更改,实际上就是把暂存区的所有内容提交到当前分支。

 

撤销修改

 

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout file-name

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

场景4:未加入版本库的文件全部删除  git clean –f –d

 

删除文件

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容 (恢复 $ git checkout -- test.txt)

 

远程仓库

 

1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开ShellWindows下打开Git Bash),创建SSH Key$ ssh-keygen -t rsa -C "youremail@example.com"

2步:登陆GitHub,打开“Account settings”“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

 

添加远程仓库

 

要关联一个远程库,使用命令git remote add origingit@server-name:path/repo-name.git

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

 

创建与合并分支

  1. 查看分支:git branch
  2. 创建分支:git branch name
  3. 切换分支:git checkout name
  4. 创建+切换分支:git checkout -b name
  5. 合并某分支到当前分支:git merge name
  6. 删除分支:git branch -d name
  7. 查看分支合并图:git log --graph
  8. 忽略zh文件上传命令:echo “zh” > .gitignore git add .
  9. 普通模式合并:$ git merge --no-ff -m "merge with no-ff" dev (fast forward合并就看不出来曾经做过合并)

Bug分支

  1. 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
  2. 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
  3. 查看stash列表:git stash list
  4. 恢复stash某版本:git stash apply stash@{0}
  5. 删除stash某版本:git stash drop
  6. 强行删除分支:git branch -D feature-vulcan
  7. 删除远程分支: git push origin --delete <branchName>

或者git push origin :<branchName>推送一个空分支到远程分支

  1. 删除tag:git push origin --delete tag <tagname>sdfsdfsdfsdf

或者推送一个空tag到远程tag

git tag -d<tagname>git pushorigin :refs/tags/<tagname>

  1. 服务器分支删除之后,更新分支信息git fetch origin --prune

 

多人协作

  1. 显示详细的权限信息:git remote -v
  2. 推送分支:git push origin master
  3. 抓取分支:git clone git@github.com:michaelliao/learngit.git
  4. 创建远程origin的dev分支到本地:git checkout -b dev origin/dev
  5. 把dev分支push到远程:git commit -m "add /usr/bin/env",git push origin dev

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-nameorigin/branch-name.

 

标签管理

 

发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。

创建标签

  1. 命令git tag name (commit id)用于新建一个标签,默认为HEAD;
  2. -a tagname -m "blablabla..."可以指定标签信息;
  3. -s tagname -m "blablabla..."可以用PGP签名标签;
  4. 命令git tag(git show tagname)可以查看所有标签.

操作标签

  1. 删除本地标签:git tag -d v0.1
  2. 删除远程标签: 先从本地删除,再 git push origin :refs/tags/v0.9
  3. 推送标签到远程:git push origin tagname
  4. 推送全部尚未推送的本地标签:git push origin --tags

使用GitHub

  1. 在GitHub上,可以任意Fork开源仓库;
  2. 自己拥有Fork后的仓库的读写权限;
  3. 可以推送pull request给官方仓库来贡献代码。

忽略特殊文件

 

颜色设置:git config --global color.ui true

忽略文件:需要编写.gitignore

.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!

 

配置别名

  1. $ git config --global alias.co checkout
  2. $ git config --global alias.ci commit
  3. $ git config --global alias.br branch

搭建Git服务器

 

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用UbuntuDebian

假设你已经有sudo权限的用户账号,下面,正式开始安装。

第一步,安装git

$ sudo apt-get install git

第二步,创建一个git用户,用来运行git服务:

$ sudo adduser git

第三步,创建证书登录:

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。(可以用Gitosis来管理公钥)

第四步,初始化Git仓库:

先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:$ sudo git init --bare sample.gitGit就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git$ sudo chown -R git:git sample.git

第五步,禁用shell登录:

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

第六步,克隆远程仓库:

现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

$ git clone git@server:/srv/sample.git
Cloning into 'sample'...

第七步:

要方便管理公钥,用Gitosis

要像SVN那样变态地控制权限,用Gitolite

 

常用命令参考:git cheat sheet

 

 

补丁

1git format-patch -3  最近3次提交打补丁

 

2git am 0001-.patch 应用该补丁

git apply --reject 0001-ID.patch

3

下边的命令可以打印出git的分支图

git log--graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s%Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

或者通过下列命令在git config文件里面设置别名。

gitconfig --global alias.loggraph "log --graph --all--pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(boldblue)<%an>%Creset' --abbrev-commit --date=relative"

然后通过命令

git loggraph

来列出分支图

 

合并多个提交为一个

git rebase -i HEAD~[number_of_commits]

 

查看文件代码每一行最后一次更新

git blame filename

 

同一个文件的修改分开处理

git add -p [file_name]

 

reflog在不小心提交了些你不想要的东西,不得不做一次强制重置来恢复到之前的状态。然后,你意识到在这一过程中你丢失了其它一些信息并且想要把它们找回来,或者至少瞅一眼

git reflog

 

这里你可以看到丢掉的提交。你可以通过运行 git show[commit_hash] 查看提交之后的改变或者运行git merge[commit_hash] 来恢复到之前的提交。git fsck 相对reflog是有优势的。比方说你删除一个远程的分支然后关闭仓库。fsck 你可以搜索和恢复已删除的远程分支。

git fsck --lost-found

 

查看日志

git log --graph  --oneline --all

 

cherry-pick就是从不同的分支中捡出一个单独的commit,并把它和你当前的分支合并。如果你以并行方式在处理两个或以上分支,你可能会发现一个在全部分支中都有的bug。如果你在一个分支中解决了它,你可以使用cherry-pick命令把它commit到其它分支上去,而不会弄乱其他的文件或commit

git cherry-pick [commit_hash]

 

记住帐号密码

git config --global credential.helper store

源码地址: https://pan.quark.cn/s/a4b39357ea24 欧姆龙触摸屏编程软件MPTST 5.02是专门为欧姆龙品牌的工业触摸屏而研发的编程解决方案,它赋予用户在直观界面上构建、修改以及排错触摸屏应用程序的能力。 该软件在工业自动化领域具有不可替代的地位,特别是在生产线监视、设备操控以及人机互动系统中发挥着核心作用。 欧姆龙MPTST(Machine Process Terminal Software Touch)5.02版本配备了多样化的功能,旨在应对不同种类的触摸屏项目要求。 以下列举了若干核心特性:1. **图形化编程**:MPTST 5.02采用图形化的编程模式,允许用户借助拖拽动作来设计屏幕布局,设定按钮、滑块、指示灯等组件,显著简化了编程流程,并提升了工作效率。 2. **兼容性**:该软件能够适配欧姆龙的多个触摸屏产品线,包括CX-One、NS系列、NJ/NX系列等,使用户可以在同一个平台上完成对不同硬件的编程任务。 3. **数据通信**:MPTST 5.02具备与PLC(可编程逻辑控制器)进行数据交互的能力,通过将触摸屏作为操作界面,实现生产数据的显示与输入,以及设备状态的监控。 4. **报警与事件管理**:软件中集成了报警和事件管理机制,可以设定多种报警标准,一旦达到预设条件,触摸屏便会展示对应的报警提示,助力操作人员迅速做出响应。 5. **模拟测试**:在设备实际连接之前,MPTST 5.02支持用户进行脱机模拟测试,以此验证程序的正确性与稳定性。 6. **项目备份与恢复**:为了防止数据遗失,MPTST 5.02提供了项目文件的备份及还原功能,对于多版本控制与团队协作具有显著价值。 7. **多语言支持**:针对全球化的应...
本资源包为流体力学与化学传质交叉领域的研究提供了一套完整的数值模拟解决方案,重点针对湍流条件下通道内溶解物质的输运与分布规律进行定量分析。该工具集专为高等院校理工科专业的教育与科研需求设计,尤其适合计算机科学、电子工程及数学等相关学科的本科生在完成课程项目、综合设计或学位论文时使用。 软件环境兼容多个版本的MatLAB平台,包括2014a、2019b及后续的2024b发行版,确保了在不同实验室或个人计算环境中的可移植性。资源包内预置了经过验证的示例数据集,用户可直接调用主程序执行计算,显著降低了初始学习成本,使初学者能够迅速掌握基本操作流程。 代码架构采用模块化与参数驱动设计。所有关键物理参数(如流速、扩散系数、边界条件等)均集中于独立的配置模块,用户无需深入底层算法即可灵活调整计算条件,从而高效模拟多种湍流溶解场景。程序逻辑结构清晰,各功能段均配有详尽的说明注释,既阐述了数值方法的理论依据,也解释了关键步骤的实现意图,便于使用者理解模型构建过程并进行针对性修改。 在学术训练方面,本工具能够帮助学生将抽象的流体动力学与传质理论转化为可视化的数值实验结果,深化对湍流混合、浓度边界层等概念的理解。对于毕业设计或专题研究,其参数化框架支持用户嵌入自定义模型,开展创新性数值实验,为深入研究复杂流动中的溶解机制提供可靠的技术支撑。 总体而言,该MATLAB分析工具集通过结构化的代码设计、完备的案例支持与广泛的版本兼容性,为流体溶解现象的数值研究提供了一个高效、可扩展的计算平台,兼具教学示范与科研探索的双重价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
标题JSPM自行车个性化改装推荐系统研究AI更换标题第1章引言介绍自行车个性化改装推荐系统的研究背景、意义及国内外研究现状。1.1研究背景与意义阐述自行车个性化改装需求增长及推荐系统的重要性。1.2国内外研究现状分析国内外自行车改装推荐系统的研究进展及不足。1.3研究方法及创新点概述JSPM系统的设计方法及相较于其他系统的创新点。第2章相关理论介绍与自行车个性化改装推荐系统相关的理论基础。2.1个性化推荐理论阐述个性化推荐的基本原理和常用算法。2.2自行车改装知识介绍自行车结构、部件及改装选项等基础知识。2.3用户偏好分析理论讨论如何分析用户偏好以实现精准推荐。第3章JSPM系统设计详细介绍JSPM自行车个性化改装推荐系统的设计方案。3.1系统架构设计阐述系统的整体架构、模块划分及功能。3.2数据库设计介绍系统数据库的设计思路、表结构及关系。3.3推荐算法设计详细介绍基于用户偏好的推荐算法实现过程。第4章系统实现与测试介绍JSPM系统的实现过程及测试方法。4.1系统开发环境与工具说明系统开发所使用的环境、工具及技术栈。4.2系统实现过程阐述系统从设计到实现的具体步骤和关键代码。4.3系统测试与优化介绍系统的测试方法、测试结果及优化措施。第5章研究结果与分析展示JSPM系统的实验分析结果并进行讨论。5.1实验数据与指标介绍实验所采用的数据集、评估指标及实验环境。5.2实验结果展示通过图表等形式展示实验结果,包括推荐准确率等。5.3结果分析与讨论对实验结果进行详细分析,讨论系统的优缺点及改进方向。第6章结论与展望总结JSPM自行车个性化改装推荐系统的研究成果并展望未来。6.1研究结论概括本文的主要研究成果,包括系统设计、实现及实验结果。6.2展望指出系统存在的不足,提出未来研究的方向和改进措施。
下载前必看:https://pan.quark.cn/s/a4b39357ea24 在计算机科学范畴内,编译原理被视为一个关键分支,它主要探讨编程语言如何转化为机器可识别的形式。 本次实验的核心内容是关于非确定有限自动机(NFA)的确定化与最小化这两个重要过程,这两个概念对于深入理解正则表达式以及编译器设计具有决定性意义。 我们将详细研究NFA,并分析其确定化、最小化的相关理论及在C++中的具体实现。 非确定有限自动机(Non-Deterministic Finite Automaton,简称NFA)是一种用于识别正则语言的计算模型。 与确定有限自动机(DFA)相比较,NFA在处理输入信号时能够存在多个状态转移路径。 在NFA的结构中,一个状态对于相同的字符输入可以产生多个不同的输出,这一特性使得NFA在某些应用场景下更为强大,能够识别更为复杂的正则表达式。 将NFA进行确定化,指的是将其转化为一个等价的DFA。 在确定的DFA中,当处理输入信号时,只有一个明确的路径可供选择,这种结构对于实际操作来说更为高效。 确定化NFA的过程通常涉及到ε-闭包(epsilon closure)的概念,即针对一个状态集合,找出所有可以通过ε(空字符)从该集合中的任一状态移动到达的状态集合。 通过逐步构建状态转移表,我们可以逐步形成等价的DFA。 NFA的最小化过程是指找到一个与原始NFA等价但状态数量最少的DFA。 最小化DFA的主要目的在于减少内存的使用量并提升执行效率。 常用的最小化方法是基于子集构造法,通过对比每个状态集合的特性(例如是否接受或拒绝特定的输入信号),逐步合并相似的状态集合,直到无法继续合并为止。 C++作为一种功能强大的系统级编程语言,提供了丰富的数据结构与算法支持,非常适合用...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值