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 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
源码来自:https://pan.quark.cn/s/a4b39357ea24 在VC++开发过程中,对话框(CDialog)作为典型的用户界面组件,承担着与用户进行信息交互的重要角色。 在VS2008SP1的开发环境中,常常需要满足为对话框配置个性化背景图片的需求,以此来优化用户的操作体验。 本案例将系统性地阐述在CDialog框架下如何达成这一功能。 首先,需要在资源设计工具中构建一个新的对话框资源。 具体操作是在Visual Studio平台中,进入资源视图(Resource View)界面,定位到对话框(Dialog)分支,通过右键选择“插入对话框”(Insert Dialog)选项。 完成对话框内控件的布局设计后,对对话框资源进行保存。 随后,将着手进行背景图片的载入工作。 通常有两种主要的技术路径:1. **运用位图控件(CStatic)**:在对话框界面中嵌入一个CStatic控件,并将其属性设置为BST_OWNERDRAW,从而具备自主控制绘制过程的权限。 在对话框的类定义中,需要重写OnPaint()函数,负责调用图片资源并借助CDC对象将其渲染到对话框表面。 此外,必须合理处理WM_CTLCOLORSTATIC消息,确保背景图片的展示不会受到其他界面元素的干扰。 ```cppvoid CMyDialog::OnPaint(){ CPaintDC dc(this); // 生成设备上下文对象 CBitmap bitmap; bitmap.LoadBitmap(IDC_BITMAP_BACKGROUND); // 获取背景图片资源 CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pOldBitmap = m...
【集群划分】基于kmeans的电压调节的集群划分【IEEE33节点】内容概要:本文围绕基于KMeans算法的电压调节集群划分展开,以IEEE33节点配电网为研究对象,探讨含分布式光伏的配电网中电压协调控制问题。通过KMeans聚类算法将网络节点划分为若干电压调控集群,旨在降低电压越限风险、提升配电网运行稳定性。文中结合Matlab代码实现,详细展示了集群划分过程、聚类结果可视化及后续电压协调控制策略的设计思路,适用于电力系统中分布式能源接入带来的电压管理挑战。该方法有助于实现分区治理、优化资源配置,并为后续的分布式控制提供结构基础。; 适合人群:具备电力系统基础知识,熟悉Matlab编程,从事配电网优化、分布式能源管理或智能电网相关研究的研究生及科研人员;有一定机器学习背景的工程技术人员。; 使用场景及目标:①应用于含高渗透率光伏发电的配电网电压调控研究;②用于复现IEEE33节点系统中的集群划分与电压协调控制模型;③支撑科研论文复现、课题开发与算法验证,推动智能配电网的分区协同控制技术发展; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注KMeans在电网拓扑数据上的特征选取与距离度量方式,理解聚类结果对电压控制性能的影响,并可进一步拓展至动态聚类或多目标优化集成。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值