<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Svn · Amigoer‘s Blog</title><link>https://www.amigoer.com/tags/svn/</link><description>记录技术探索 · 项目 · 生活</description><generator>Hugo + amigoer</generator><language>zh-cn</language><copyright>© 2026 Amigoer</copyright><lastBuildDate>Sat, 13 Jun 2026 04:46:30 +0000</lastBuildDate><atom:link href="https://www.amigoer.com/tags/svn/index.xml" rel="self" type="application/rss+xml"/><item><title>Git学习笔记</title><link>https://www.amigoer.com/posts/git-notes/</link><pubDate>Mon, 10 Oct 2022 00:09:00 +0800</pubDate><author>i@amigoer.com (Amigoer)</author><guid isPermaLink="true">https://www.amigoer.com/posts/git-notes/</guid><description>近况 最近这几天在学习C++，我主要学的语言是Java。但是考研的初试和复试都只能使用C/C++来进行编程，所以就去学了C++，最近在看《C++ Primer Plus》这本书，系统的学习一下。之前有过一些C语言和面向对象的基础，学起来还是蛮容易的。</description><content:encoded><![CDATA[<h2 id="近况">近况</h2>
<p>最近这几天在学习C++，我主要学的语言是Java。但是考研的初试和复试都只能使用C/C++来进行编程，所以就去学了C++，最近在看《C++ Primer Plus》这本书，系统的学习一下。之前有过一些C语言和面向对象的基础，学起来还是蛮容易的。</p>
<p>就想去刷Leetcode，用Github管理一下自己的刷题笔记，就建好了仓库。之前一直使用的IDEA的版本控制，对接到Github，不需要Git指令也能操作，但是这次我创建的<code>.gitignore</code>文件我明明已经在文件内声明不进行管理，但是还是传到仓库了，个人的强迫症十分严重，就想把这个文件删掉。</p>
<p>写好了<code>.gitignore</code>文件，但是一直没解析，第一反应就是缓存的问题，在网上找了相关的问题，还是没有效果，索性就直接系统的学一遍吧，真的太折磨人。</p>
<p>于是就有了这篇Git学习文章。</p>
<h2 id="关于">关于</h2>
<p>Git 是一个开源的分布式版本控制系统，用于敏捷高效地处理任何或小或大的项目。</p>
<p>Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。</p>
<p>Git 与常用的版本控制工具 CVS, Subversion 等不同，它采用了分布式版本库的方式，不必服务器端软件支持。</p>
<img src="git-logo.png" alt="git" style="width: 240px;">
<h2 id="与svn的区别">与SVN的区别</h2>
<p>Git 不仅仅是个版本控制系统，它也是个内容管理系统(CMS)，工作管理系统等。</p>
<p>如果你是一个具有使用 SVN 背景的人，你需要做一定的思想转换，来适应 Git 提供的一些概念和特征。</p>
<p>Git 与 SVN 区别点：</p>
<ul>
<li>1、Git 是分布式的，SVN 不是 ：这是 Git 和其它非分布式的版本控制系统，例如 SVN，CVS 等，最核心的区别。</li>
<li>2、Git 把内容按元数据方式存储，而 SVN 是按文件： 所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。</li>
<li>3、Git 分支和 SVN 的分支不同： 分支在 SVN 中一点都不特别，其实它就是版本库中的另外一个目录。</li>
<li>4、Git 没有一个全局的版本号，而 SVN 有： 目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。</li>
<li>5、Git 的内容完整性要优于 SVN： Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性，确保在遇到磁盘故障和网络问题时降低对版本库的破坏。</li>
</ul>
<blockquote>
<p>这里我觉得最重要的就是Git是分布式的，SVN是中央式的即可。</p>
</blockquote>
<h2 id="git指令">Git指令</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">git init                                                  # 初始化本地git仓库（创建新仓库）
</span></span><span class="line"><span class="cl">git config --global user.name &#34;xxx&#34;                       # 配置用户名
</span></span><span class="line"><span class="cl">git config --global user.email &#34;xxx@xxx.com&#34;              # 配置邮件
</span></span><span class="line"><span class="cl">git config --global color.ui true                         # git status等命令自动着色
</span></span><span class="line"><span class="cl">git config --global color.status auto
</span></span><span class="line"><span class="cl">git config --global color.diff auto
</span></span><span class="line"><span class="cl">git config --global color.branch auto
</span></span><span class="line"><span class="cl">git config --global color.interactive auto
</span></span><span class="line"><span class="cl">git config --global --unset http.proxy                    # remove  proxy configuration on git
</span></span><span class="line"><span class="cl">git clone git+ssh://git@192.168.53.168/VT.git             # clone远程仓库
</span></span><span class="line"><span class="cl">git status                                                # 查看当前版本状态（是否修改）
</span></span><span class="line"><span class="cl">git add xyz                                               # 添加xyz文件至index
</span></span><span class="line"><span class="cl">git add .                                                 # 增加当前子目录下所有更改过的文件至index
</span></span><span class="line"><span class="cl">git commit -m &#39;xxx&#39;                                       # 提交
</span></span><span class="line"><span class="cl">git commit --amend -m &#39;xxx&#39;                               # 合并上一次提交（用于反复修改）
</span></span><span class="line"><span class="cl">git commit -am &#39;xxx&#39;                                      # 将add和commit合为一步
</span></span><span class="line"><span class="cl">git rm xxx                                                # 删除index中的文件
</span></span><span class="line"><span class="cl">git rm -r *                                               # 递归删除
</span></span><span class="line"><span class="cl">git log                                                   # 显示提交日志
</span></span><span class="line"><span class="cl">git log -1                                                # 显示1行日志 -n为n行
</span></span><span class="line"><span class="cl">git log -5
</span></span><span class="line"><span class="cl">git log --stat                                            # 显示提交日志及相关变动文件
</span></span><span class="line"><span class="cl">git log -p -m
</span></span><span class="line"><span class="cl">git show dfb02e6e4f2f7b573337763e5c0013802e392818         # 显示某个提交的详细内容
</span></span><span class="line"><span class="cl">git show dfb02                                            # 可只用commitid的前几位
</span></span><span class="line"><span class="cl">git show HEAD                                             # 显示HEAD提交日志
</span></span><span class="line"><span class="cl">git show HEAD^                                            # 显示HEAD的父（上一个版本）的提交日志 ^^为上两个版本 ^5为上5个版本
</span></span><span class="line"><span class="cl">git tag                                                   # 显示已存在的tag
</span></span><span class="line"><span class="cl">git tag -a v2.0 -m &#39;xxx&#39;                                  # 增加v2.0的tag
</span></span><span class="line"><span class="cl">git show v2.0                                             # 显示v2.0的日志及详细内容
</span></span><span class="line"><span class="cl">git log v2.0                                              # 显示v2.0的日志
</span></span><span class="line"><span class="cl">git diff                                                  # 显示所有未添加至index的变更
</span></span><span class="line"><span class="cl">git diff --cached                                         # 显示所有已添加index但还未commit的变更
</span></span><span class="line"><span class="cl">git diff HEAD^                                            # 比较与上一个版本的差异
</span></span><span class="line"><span class="cl">git diff HEAD -- ./lib                                    # 比较与HEAD版本lib目录的差异
</span></span><span class="line"><span class="cl">git diff origin/master..master                            # 比较远程分支master上有本地分支master上没有的
</span></span><span class="line"><span class="cl">git diff origin/master..master --stat                     # 只显示差异的文件，不显示具体内容
</span></span><span class="line"><span class="cl">git remote add origin git+ssh://git@192.168.53.168/VT.git # 增加远程定义（用于push/pull/fetch）
</span></span><span class="line"><span class="cl">git branch                                                # 显示本地分支
</span></span><span class="line"><span class="cl">git branch --contains 50089                               # 显示包含提交50089的分支
</span></span><span class="line"><span class="cl">git branch -a                                             # 显示所有分支
</span></span><span class="line"><span class="cl">git branch -r                                             # 显示所有原创分支
</span></span><span class="line"><span class="cl">git branch --merged                                       # 显示所有已合并到当前分支的分支
</span></span><span class="line"><span class="cl">git branch --no-merged                                    # 显示所有未合并到当前分支的分支
</span></span><span class="line"><span class="cl">git branch -m master master_copy                          # 本地分支改名
</span></span><span class="line"><span class="cl">git checkout -b master_copy                               # 从当前分支创建新分支master_copy并检出
</span></span><span class="line"><span class="cl">git checkout -b master master_copy                        # 上面的完整版
</span></span><span class="line"><span class="cl">git checkout features/performance                         # 检出已存在的features/performance分支
</span></span><span class="line"><span class="cl">git checkout --track hotfixes/BJVEP933                    # 检出远程分支hotfixes/BJVEP933并创建本地跟踪分支
</span></span><span class="line"><span class="cl">git checkout v2.0                                         # 检出版本v2.0
</span></span><span class="line"><span class="cl">git checkout -b devel origin/develop                      # 从远程分支develop创建新本地分支devel并检出
</span></span><span class="line"><span class="cl">git checkout -- README                                    # 检出head版本的README文件（可用于修改错误回退）
</span></span><span class="line"><span class="cl">git merge origin/master                                   # 合并远程master分支至当前分支
</span></span><span class="line"><span class="cl">git cherry-pick ff44785404a8e                             # 合并提交ff44785404a8e的修改
</span></span><span class="line"><span class="cl">git push origin master                                    # 将当前分支push到远程master分支
</span></span><span class="line"><span class="cl">git push origin :hotfixes/BJVEP933                        # 删除远程仓库的hotfixes/BJVEP933分支
</span></span><span class="line"><span class="cl">git push --tags                                           # 把所有tag推送到远程仓库
</span></span><span class="line"><span class="cl">git fetch                                                 # 获取所有远程分支（不更新本地分支，另需merge）
</span></span><span class="line"><span class="cl">git fetch --prune                                         # 获取所有原创分支并清除服务器上已删掉的分支
</span></span><span class="line"><span class="cl">git pull origin master                                    # 获取远程分支master并merge到当前分支
</span></span><span class="line"><span class="cl">git mv README README2                                     # 重命名文件README为README2
</span></span><span class="line"><span class="cl">git reset --hard HEAD                                     # 将当前版本重置为HEAD（通常用于merge失败回退）
</span></span><span class="line"><span class="cl">git rebase
</span></span><span class="line"><span class="cl">git branch -d hotfixes/BJVEP933                           # 删除分支hotfixes/BJVEP933（本分支修改已合并到其他分支）
</span></span><span class="line"><span class="cl">git branch -D hotfixes/BJVEP933                           # 强制删除分支hotfixes/BJVEP933
</span></span><span class="line"><span class="cl">git ls-files                                              # 列出git index包含的文件
</span></span><span class="line"><span class="cl">git show-branch                                           # 图示当前分支历史
</span></span><span class="line"><span class="cl">git show-branch --all                                     # 图示所有分支历史
</span></span><span class="line"><span class="cl">git whatchanged                                           # 显示提交历史对应的文件修改
</span></span><span class="line"><span class="cl">git revert dfb02e6e4f2f7b573337763e5c0013802e392818       # 撤销提交dfb02e6e4f2f7b573337763e5c0013802e392818
</span></span><span class="line"><span class="cl">git ls-tree HEAD                                          # 内部命令：显示某个git对象
</span></span><span class="line"><span class="cl">git rev-parse v2.0                                        # 内部命令：显示某个ref对于的SHA1 HASH
</span></span><span class="line"><span class="cl">git reflog                                                # 显示所有提交，包括孤立节点
</span></span><span class="line"><span class="cl">git show HEAD@{5}
</span></span><span class="line"><span class="cl">git show master@{yesterday}                               # 显示master分支昨天的状态
</span></span><span class="line"><span class="cl">git log --pretty=format:&#39;%h %s&#39; --graph                   # 图示提交日志
</span></span><span class="line"><span class="cl">git show HEAD~3
</span></span><span class="line"><span class="cl">git show -s --pretty=raw 2be7fcb476
</span></span><span class="line"><span class="cl">git stash                                                 # 暂存当前修改，将所有至为HEAD状态
</span></span><span class="line"><span class="cl">git stash list                                            # 查看所有暂存
</span></span><span class="line"><span class="cl">git stash show -p stash@{0}                               # 参考第一次暂存
</span></span><span class="line"><span class="cl">git stash apply stash@{0}                                 # 应用第一次暂存
</span></span><span class="line"><span class="cl">git grep &#34;delete from&#34;                                    # 文件中搜索文本“delete from”
</span></span><span class="line"><span class="cl">git grep -e &#39;#define&#39; --and -e SORT_DIRENT
</span></span><span class="line"><span class="cl">git gc
</span></span><span class="line"><span class="cl">git fsck
</span></span></code></pre></div><h2 id="学习资料">学习资料</h2>
<p>推荐菜鸟教程的Git相关教程，看看文档即可掌握。</p>
<blockquote>
<p>本文相关代码来源于<a href="https://www.runoob.com/git/git-tutorial.html">菜鸟教程 Git 教程</a></p>
</blockquote>
]]></content:encoded><category>学习笔记</category></item></channel></rss>