Git笔记
目录
Git概念
Git 是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 Git 对待数据更像是一个 快照流。
git配置
git的安装
在 linux上:
设置不跟踪文件,添加.gitignore文件,配置需要忽略的文件
参考网址:
远程仓库配置
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" :生成秘钥,进行远程仓库连接
忽略跟踪文件
创建一个名为 .gitignore
的文件,列出要忽略的文件模式
第一行告诉 Git 忽略所有以 .o
或 .a
结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。 第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。 此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。 要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件
git指令
git init:在当前文件夹下创建管理版本仓库
文件跟踪指令:
git status -s:一种更为紧凑的格式输出
git status .:查看当前文件夹里的文件修改状态
git diff:查看文件缓存前后的区别,工作目录中当前文件和暂存区域快照之间的差异, 就是修改之后还没有暂存起来的变化内容
git diff --cached:查看已暂存的将要添加到下次提交里的内容
git rm --cached README:把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中
git add 文件名:将文件添加到仓库
git commit -m"版本说明":一般执行 git add 命令后使用
git commit -a -m "版本说明" :可以跳过git add的使用
git commit --amend:修改之前提交的信息,这样代码只会提交最新修改的
查看提交历史
git log :查看仓库内的版本情况
git log -p:常看每次提交的差异
git log -p -N:查看近N次的差异
git log --stat:快速浏览某个搭档提交的 commit 所带来的变化
git log --pretty=format:"%h - %an, %ar : %s":定制要显示的记录格式
选项 | 说明 |
---|---|
|
提交对象(commit)的完整哈希字串 |
|
提交对象的简短哈希字串 |
|
树对象(tree)的完整哈希字串 |
|
树对象的简短哈希字串 |
|
父对象(parent)的完整哈希字串 |
|
父对象的简短哈希字串 |
|
作者(author)的名字 |
|
作者的电子邮件地址 |
|
作者修订日期(可以用 --date= 选项定制格式) |
|
作者修订日期,按多久以前的方式显示 |
|
提交者(committer)的名字 |
|
提交者的电子邮件地址 |
|
提交日期 |
|
提交日期,按多久以前的方式显示 |
|
提交说明 |
选项 | 说明 |
---|---|
|
按补丁格式显示每个更新之间的差异。 |
|
显示每次更新的文件修改统计信息。 |
|
只显示 --stat 中最后的行数修改添加移除统计。 |
|
仅在提交信息后显示已修改的文件清单。 |
|
显示新增、修改、删除的文件清单。 |
|
仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。 |
|
使用较短的相对时间显示(比如,“2 weeks ago”)。 |
|
显示 ASCII 图形表示的分支合并历史。 |
|
使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。 |
git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/:2008 年 10 月期间,Junio Hamano 提交的但未合并的测试文件,示例结果
选项 | 说明 |
---|---|
|
仅显示最近的 n 条提交 |
|
仅显示指定时间之后的提交。 |
|
仅显示指定时间之前的提交。 |
|
仅显示指定作者相关的提交。 |
|
仅显示指定提交者相关的提交。 |
|
仅显示含指定关键字的提交 |
|
仅显示添加或移除了某个关键字的提交 |
git log --oneline --decorate --graph --all:查看所有分支的情况
git log -p filenam:可以显示每次提交的diff
git log filename:可以看到fileName相关的commit记录
git log --pretty=oneline filename: 显示所有提交记录,每条记录只显示一行
撤消操作
git commit --amend //修改commit文件
git reset HEAD file:将文件从暂存区取消,取消后以本地修改为主
git checkout -- file:将本地的修改,撤回到未修改状态。
git reset --soft HEAD^:撤回提交的commit,修改的文件依旧保留
git reset file:将撤回的修改一起合并
git reset --hard HEAD^:回退到上一个版本,git log 命令查找不到最初使用版本情况
git reset --hard 版本号:回退到版本还的版本,不可逆
git reflog :记录了每个版本的版本号,在运用 git reset --hard 版本号 可以回到任意版本WQ
远程仓库的使用
git remote -v:查看连接的远程仓库
git remote add URLtname url:添加一个新的远程 Git 仓库,字符串 shortname来代替整个 URL示例:
git fetch URLtname:从远程仓库中抓取与拉取,会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意 git fetch
命令会将数据拉取到你的本地仓库——它并不会自动合并或修改你当前的工作
git clone shortname:命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或不管是什么名字的默认分支)
git pull shortname :通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支
git push remote-name branch-name:当你想要将 master 分支推送到 origin
服务器时(再次说明,克隆时通常会自动帮你设置好那两个名字),那么运行这个命令就可以将你所做的备份到服务器:如果推送失败,先对远程服务器上的东西同步,命令为:git pull shortname
git remote rename URLname newname:修改一个远程仓库的简写名
git remote rm URLname:删除远程仓库,不在使用
git remote rm origin //移除原有远程仓库,
git remote add origin git@github.com:w-x-me/MyQGC.git //添加新的远程仓库
git push -u origin main
标签
轻量标签(lightweight)与附注标签(annotated)。
轻量标签:像一个不会改变的分支——它只是一个特定提交的引用。
附注标签:是存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。 通常建议创建附注标签,这样你可以拥有以上所有信息;但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存那些信息,轻量标签也是可用的。
git tag:查看标签
git tag -a TagName -m "description":创建一个附注标签是很简单的。 最简单的方式是当你在运行 tag
命令时指定 -a
选项
git tag TagName:创建轻量级标签。
git show TagName:针对附注标签:显示标签信息与对应的提交信息。轻量标签:不显示额外的标签信息,只会显示出提交信息
git tag -a TagName logID:对过去的提交打标签,logID是指commit的校验和
git push URLname TagName:创建完标签后你必须显式地推送标签到共享服务器上
git push URLname --tags
git tag -d TagName:删除掉你本地仓库上的标签
git push URLname :refs/tags/TagName:从远程仓库中移除这个标签
git checkout TagName:查看某个标签所指向的文件版本,并且切换到某个标签位置
分支
Git 的分支,其实本质上仅仅是指向提交对象的可变指针
三个将要被暂存和提交的文件。 暂存操作会为每一个文件计算校验和(使用我们在
Git 仓库中有五个对象:三个 blob 对象(保存着文件快照)、一个树对象(记录着目录结构和 blob 对象索引)以及一个提交对象(包含着指向前述树对象的指针和所有提交信息)。
Git 的默认分支名字是 master
。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master
分支。
HEAD
概念: 它是一个指针,指向当前所在的本地分支(译注:将 HEAD
想象为当前分支的别名)
git branch :查看分支
git branch BranchName :创建分支
git checkout -b BranchName :创建并且选择分支
git checkout BranchName :切换分支,当俩个分支内容不一样,必须提交修改后,才能进行切换
git log --oneline --decorate --graph --all:查看分支结构
git merge BranchName:将BranchName合并到到当前分支
git branch -d 分支名字:删除分支
常见错误提示及解决方法
1、没有将本地库添加到分支中。提示如图:
解决方法:$ git commit -m"Demon" 输入次命令,添加分支说明
2、push前未同步远程仓库,提示如图:
解决方法:先执行pull, git pull origin
1、pull时进入编辑目录解决方法
Esc---->ctrl+x--->按提示输入Y,退出之后在push
2、pull时错误提示,未见分支合并
执行命令:git merge --abort
git reset --merge //将分支合并
git patch的运用
生成patch文件:git format-patch 版本 --stdout > 生成的patch文件 例:git forma-patch HEAD^ --stdout > my.patch
查看patch文件情况:git apply --stat patch文件名 例:git apply --stat my.patch
查看patch能否运用:git apply --check patch文件名 例:git apply --check my.patch
在运用前,确定代码commit了
运用patch:git am --signoff < patch文件名 例:git am --signoff < my.patch
执行异常:git am --abort
git中branch/commit/add之间关系
1、创建分支后,在分支中修改代码,而未commit,进行branch操作,
例如存在分支为:1和
分支内容一样:1、2分支内容都被修改,原有的分支内容被覆盖。如果对1进行comit的就是,2就会回到最初始的版本。文学23
分支内容不一样:分支切换失败
Windows下Git的使用
1、安装Git Bash
2、双击Git Bash工具,配置GitHub相关信息,方便抓取code
git config --global user.name '用户名'
git config --global user.email '邮箱'
3、在根目录创建.ssh文件夹(如果存在可以不创建),进入.ssh文件夹,执行
ssh-keygen -t rsa -C '邮箱'
创建对应的私钥,方便后期抓取code。
4、在C盘找到对用的.ssh/id_rsa.pub 文件内容
5、打开 git 网站,右上角用户头像,点击 settings,左侧菜单 SSH KEYS,将文件内容复制到 key 里 添加就可以了
参考:
1、git命令及作用
- git init //在当前文件夹下创建管理版本仓库
- git add FileName //将文件添加本地仓库
- git commit -m"spec" //说明本次提交code目的,用于记录
- git status //查看仓库状态
- git diff FileName //查看上次修改的数据,与当前仓库内最新版本的区别
- git log //查看仓库内的版本情况
- git log --pretty=oneline fileName //查看fileName修改历史
- git log -p -N //查看近N此的修改
- git reset --hard HEAD^ //回退到上一个版本,git log 命令查找不到最初使用版本情况
- git reset --hard 版本号 //回退到版本号
- get reset --soft HEAD^ //将commit移除,修改保留数据
- git reset FileName //将文件从本地仓库撤回到工作区,修改保留
- git commit --amend //撤销commit的修改
- git checkout --fileName //撤销本地仓库fileName的修改
- git reflog //记录了每个版本的版本号,在运用 git reset --hard 版本号 可以回到任意版本WQ
- git branch //查看分支
- git branch BranchName //创建BranchName分支
- git checkout -b BranchName //创建并且选择BranchName分支
- git checkout BranchName //切换到BranchName分支
- git merge BranchName //将BranchName分支名合并到到当前分支
- git branch -d BranchName //删除BranchName分支
- git remote add origin //远程仓库名字
- git push -u origin master //将本地仓库内容推送到远程服务器,如果推送失败,先对远程服务器上的东西同步,命令为:git pull origin
- git clean -xfd //清除工作区untrakfile
2、Linux常用指令
- find ./ -name FileNmae //在当前文件夹查找文件FileName
- find ./ -iname "*.java" | xargs grep "xxx" //在当前文件夹中的*.java中查找“xxx”字串
- grep -rHn "xxx" ./ //在当前文件夹中查找“xxx”