<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Vico</title>
        <link>https://paragraph.com/@vico</link>
        <description>undefined</description>
        <lastBuildDate>Tue, 11 Aug 2026 20:26:17 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[GIT指北]]></title>
            <link>https://paragraph.com/@vico/git</link>
            <guid>F1aOpJe7m8A4uPQQmnCS</guid>
            <pubDate>Wed, 25 May 2022 10:50:39 GMT</pubDate>
            <description><![CDATA[很多做开发的小伙伴之前都是用svn，并不是说svn不好，只是在版本控制方面确实弱很多，怎么选各位自行决定。废话不多说，开整！一，理解概念svn只有本地、远端仓库两个存储区域。git的话则有4个存储区域，本地、stage、本地仓库、远端仓库。 1，本地：对文件的直接修改，最原始的文件存储。 2，stage：临时缓存区，修改的内容要进本地仓库的话必须先放进这里，没进本地仓库之前可以随时取消。当更改被提交进入本地仓库后，这个缓存区就会被清空。 3，本地仓库：进入这里的修改都会被记录下来，相当于游戏的存档，随时可以读档回档。 4，远端仓库：类似github的地方，也可以自己建，相当于多一个备份空间，团队协作必备。二，基础操作1，下载安装，https://git-scm.com/ 2，配置用户名、邮箱 git config --global user.name "test" git config --global user.email "test@gmail.com" 配置完可以查看当前配置，cat ~/.gitconfig 3，初始化git仓库：git init 此时随便添加几个文本文件...]]></description>
            <content:encoded><![CDATA[<p>很多做开发的小伙伴之前都是用svn，并不是说svn不好，只是在版本控制方面确实弱很多，怎么选各位自行决定。废话不多说，开整！</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">一，理解概念</h2><p>svn只有本地、远端仓库两个存储区域。git的话则有4个存储区域，本地、stage、本地仓库、远端仓库。</p><p>1，本地：对文件的直接修改，最原始的文件存储。</p><p>2，stage：临时缓存区，修改的内容要进本地仓库的话必须先放进这里，没进本地仓库之前可以随时取消。当更改被提交进入本地仓库后，这个缓存区就会被清空。</p><p>3，本地仓库：进入这里的修改都会被记录下来，相当于游戏的存档，随时可以读档回档。</p><p>4，远端仓库：类似github的地方，也可以自己建，相当于多一个备份空间，团队协作必备。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">二，基础操作</h2><p>1，下载安装，<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://git-scm.com/">https://git-scm.com/</a></p><p>2，配置用户名、邮箱</p><p>git config --global <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://user.name">user.name</a> &quot;test&quot;</p><p>git config --global user.email &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="mailto:test@gmail.com">test@gmail.com</a>&quot;</p><p>配置完可以查看当前配置，cat ~/.gitconfig</p><p>3，初始化git仓库：<em>git init</em></p><p>此时随便添加几个文本文件到目录下面，比如test.txt</p><p>4，将改动提交到stage中：git add test.txt（指定文件）或者git add -A（所有文件）</p><p>恢复改动状态（还原）：git rm --cached test.txt（指定文件）或者git reset(所有文件)</p><p>5，查看状态：git status</p><p>6，提交到本地仓库：git commit -m &quot;update description&quot;</p><p>7，连接远端仓库：git remote add origin <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/test/GitTest.git">https://github.com/test/GitTest.git</a></p><p>其中的origin是远端仓库的名字</p><p>8，提交到远端仓库：git push origin master</p><p>其中master是分支的名字。也可在命令最后加上-u，输入一次以后，之后只要执行git push就可以默认推送到origin master上去了。执行这一步的时候第一次会要求输入用户名密码，按照提示执行一遍即可。</p><p>9，如果其他小伙伴要参与你的项目开发，可以拉取你的远端仓库：</p><p>git clone <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/test/GitTest.git">https://github.com/test/GitTest.git</a> projectFolder</p><p>projectFolder是他本地的目录</p><p>10，然后当你对项目做了新的修改，并且把修改push到了远端仓库，其他小伙伴可以通过以下命令来获取你的更新：git pull</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">三，进阶操作</h2><p>1，创建分支：git branch branch_1</p><p>2，查看分支状态：git branch</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9272fe9480e28d8b98ce1b58012584cafb00878d5d33b6f8a2f51da9502f4b19.webp" alt="星号表示当前所在分支" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">星号表示当前所在分支</figcaption></figure><p>3，切换分支：git checkout branch_1</p><p>4，合并分支：git merge branch_1 --no-ff</p><p>合并可能会出现比较复杂的情况，在没有冲突的情况下先简单了解一下即可</p><p>5，删除本地分支：git branch -d branch_1</p><p>如果本地有改动，可以将-d替换成-D来强行删除</p><p>6，删除远端分支：git push origin :branch_1</p><p>注意这个操作只会删除远端仓库的分支，并不会影响本地仓库的分支。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">四，时间穿梭</h2><p>reset这个命令可以让你在各个版本里自由跳转，不能单纯的认为是回退。</p><p>git reset branch_1^</p><p>git reset branch_1~2</p><p>git reset 5d3190e</p><p>1，reset：分支名后接^表示回退一档，^^或~2回退两档，^^^或~3回退三档，如果接具体的版本号就会直接跳转。</p><p>2，接--mixed：默认参数，保留所有改动，但清空stage缓冲区</p><p>3，接--soft：保留所有改动，并保留stage缓冲区。</p><p>4，接--hard：所有文件会还原到对应版本。我比较常用的模式！</p><p>了解了reset之后，再引入一个新的命令revert，revert和reset的区别在于，revert不是直接跳转，而是在不影响之前的版本的情况下新建一个commit，把要跳转的版本内容还原过来，但这时候比较容易出现冲突，解决完冲突再重新commit即可。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">五，再谈谈合并</h2><p>合并有两种方案，merge与rebase。在没有冲突的情况下，两者功能类似。但在有冲突时会有比较大的分别，下面我分别解释一下。</p><p>假设有A，B两个分支，当前分支是B，要将A的内容合并到B。</p><p>merge：有记录可溯源。碰到冲突的话，会将所有冲突点写入冲突的文件中，手动或通过工具修改完成后，再重新commit即可。</p><p>rebase：无记录，直接合并。遇到冲突时会开一个临时分支C，将需要修改的文件放在里面，在修改完成后，通过rebase --continue合并到B分支，并删除临时分支C。如果使用rebase --abort可以舍弃本次合并，B还是原来的B。如果使用rebase --skip则会舍弃B分支的所有改动，变成和A分支一样的内容。</p>]]></content:encoded>
            <author>vico@newsletter.paragraph.com (Vico)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/e4b74cd72c1bf46946518f294c6037dca4f0040324f74225be866318832fe9b4.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>