id="c_n9"width="1920"height="990"style="position: fixed; top: 0px; left: 0px; z-index: -1; opacity: 0.5;">

Git笔记

Git笔记

(针对于Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)的小总结)

简介

git是一个分布式的版本控制工具,最早是由linux之父所开发出来的。类似于这种版本控制工具还有很多,向svn等等,但是svn这些都是

集中式的版本控制工具,而且这种都需要联网才能够上传文件,而且存在很多的一些弊端。现在Git的使用频率会高一些。

ps:版本控制其实就是一个对文件每次修改后进行来进行保存,同时也记录了每次修改的内容

在Git中是支持linux命令的。

相关的配置:

git config --global user.name "yourname"
git config --global user.email "youremail"

这个其实是配置自己仓库的一些参数,用来识别仓库时来进行使用的。每个仓库也可以指定不同的用户和邮箱地址

Git相关操作

    1. 初始化,建立一个本地的仓库repository,这个可以理解为是一个目录,对于windows下可能存在一些问题推荐使用英文的目录,尽量少使用中文,这样可以避免一些莫名奇妙的错误

      git init 
      

      这样就可以在一个目录下建立一个respository了,这个目录下面就会出现一个.git的文件,通常这个文件是隐藏的

    2. 然后就是将文件推送到仓库,首先先创建一个文件,这个一个文件需要存在repository下,然后使用git add filename.xxx将文件添加到repository中

      git add file_name
      
    3. 最后使用commit提交到repository中

      git commit -m "文件的说明"
      

      引号中是文件的说明,一般包括你对项目中代码进行了哪些修改

    1. 使用git status可以看见在你的repository中那个文件被修改了,
    2. 然后可以使用git diff file_name来查看文件的改动

    总之通过这两个命令可以很好的去掌握repository中文件的变化

    1. 在git中每一次commit都会保存一个快照,这样就可以将被修改的文件随时进行rollback的操作了。这个其实也就是通过Git中的head指针来进行操作的。当其指向哪个version就是哪个version
    2. 在git中可以使用git log来查看所有的version信息,也可以在后面加上--pretty=oneline的参数。每个记录前面的一长串信息就是commit id。另外HEAD是当前的版本,HEAD^是前一个版本,一般来说存在几个^就是前几个版本,但是这样会很麻烦,可以通过HEAD~X,这里x为一个参数,表示回退的版本
    3. 可以使用git reset --hard ,来实现相关的回退,hard后面可以接commit id和HEAD^等等一些信息来进行操作
    4. 当回退后想回到先前的version,使用commit id对应的git reset --hard commit_id即可
    5. 查看命令记录,可以使用git reflog来进行查看
  • 在git中存在一些概念:工作区(working directory)这个就是你的文件目录,也就是你在Windows下面所看到的目录仓库(repository)这个其实就是那个隐藏文件.git文件,这个里面最重要的就是暂存区(stage);还包括HEAD指针,以及分支master

    过程:首先先通过git add是将工作区的文件提交到stage中去,然后通过commit是将stage的文件提交到master中

  • 在git中保存的是文件的修改,而不是整个文件。

    git diff HEAD -- xxxx.xxx
    

    通过这样就可以将master中最新的文件和工作区中的文件进行对比

  • 在git中进行文件的回退,当你的文件出现了错误时,那么就可以通过git checkout -- file_name,不能够忘记-- file_name,否则就会变成更改branch的相关命令了

    checkout命令

    1. 当文件提交到stage中去了,但是又在working directory中修改了,那么checkout命令那么就会直接将工作区中的文件回退为stage中那个文件
    2. 当文件没有提交到stage中,working directory的文件修改了,那么checkout命令就会将working directory的文件替换为master中的最新的文件

    还有就是将文件以及提交到来暂存区中,可以使用git reset HEAD file_name,这样就可以将stage中文件清空,将其放入到working directory中去,使working directory发生改动。然后使用checkout命令进行清空。


    对于version回退的前提是:没有将repository推送到远程仓库中去。

  • 对应git的文件删除:

    1. 可以在资源管理器中进行删除,然后使用git rm file_name来进行操作,最后再commit一下这样就可以从repository中删除了。
    2. 当然,如果是误删,就可以使用checkout命令来实现回滚,类似于文件的修改。

远程仓库

  1. 首先在自己的电脑上创建一个ssh密钥:

    ssh-keygen -t rsa -C "youremail"
    

    这样就可以在C盘下的.ssh目录中创建id_rsa和id_rsa_pub,一个是私钥,一个是公钥。

  2. 然后利用公钥到GitHub上生成ssh key

  3. 然后再GitHub中创建一个的仓库,然后执行下面命令:

    git remote add origin GitHub中仓库的ssh地址
    

    这里的origin是远程仓库的名字,可以任取,一般看见origin就知道是远程repository了

    然后使用:

    git push -u origin main
    

    这里的main是一个分支;第一次连接需要使用-u这个参数,这样就可以使远程仓库和本地的关联起来了,从而也可以实现命令的减化,以后就可以直接使用git push origin main

  4. 删除关联:先可以查看关联git remote -v,然后按照远程仓库的名字进行删除git remote rm xxxxx

  5. 克隆项目:git clone xxxxx,(这种似乎就直接关联了,不确定)

分支

  1. 分支branch这个就相当于平行宇宙这个东西一样,两个branch之间是不会有影响的。

  2. Git是按照时间线来存储的,一般来说就是master一直向前走,然后通过HEAD来进行指定。当建立了一个新的分支后,就相当于新建立了一个主线,类似于master之类的。当使用new branch时,那么HEAD就会开始来指向new branch。而master就不会发生改变,一直会停在那里。当进行合并时,其实也就是将master之间拉到new branch那个地方,然后开始使用HEAD来进行指定

  3. 创建branch:git branch branch_name

  4. 切换branch:git checkout branch_name /git switch branch_name

  5. 创建&切换:git checkout -b branch_name

  6. 合并:git merge branch_name,这里是将branch_name这个分支添加到当前的这个分支上

  7. 删除:git branch -d branch_name

  8. 有时我们需要进行手动的去解决merge时出现的冲突

  9. 一般来时进行分支合并的时候,会使用“快速合并”,但是这种的话,当分支删除后,会丢失分支信息。一般采用禁用到这种合并,但是这种一般会再commit一次。

    git merge --no-ff -m "说明" branch_name
    
  10. 一般很少使用master这种主分支,而是使用其他的分支,而再不断的将其合并到主分支。这样可以解决很多的问题

  11. 当出现了一个bug时,你不想提交当前的工作时,你可以使用git stash从而将其临时的存储起来。这样就可以新建一个临时的分支来进行修复了。然后再git stash pop进行恢复,同时进行删除缓存的信息。也可以通过git stash list来查看缓存的信息。这个其实就是一个“”的结构。如何同时存在多个分支,那么其他的分支也存在bug,当然也可以通过先前的方式来进行解决;其实也可以通过cherry-pick这个命令来复制一个特定的commit到指定的分支上

    git cherry-pick commit_id
    

    这个commit_id是之前修复时的那个commit_id

  12. 对于一些没有merge的分支进行删除时,那么是无法进行删除的,需要使用-D这个参数,使用-d是无法删除的、

  13. 当项目进行提交时,可能因为远程仓库项目快一些,无法使用push,你需要将项目pull下来进行整合,但是有时候不是主分支,可能没有先关联,需要先关联,git branch --set-upstream-to=origin/branch_name branch_name,然后就可以正常的pull下来了,但是需要merge才能够进行提交,按照以前的方法解决即可。最后再push即可

  14. 从repository中clone项目时,是没有分支的。需要自己创建,再与远程的分支进行关联。git checkout -b branch_name origin/branch_name

  15. 使用rebase可以是图更加直观

tag标签

  • 通过标签可以很直观的,回退version,不用记住那些commit id。

    方法:git tag tag_name这个是之间将标签打在最新的commit上,也可以在后面指定commit id来指定这一时期的tag;也可以使用-a,-m来指定对应tag_name和说明

  • 提交到远程:git push origin --tags

  • 删除远程的标签:先删除本地git tag -d tag_name,然后再使用git push origin :refs/tags/tag_name

posted @ 2022-03-05 22:03  hellozmc  阅读(73)  评论(0编辑  收藏  举报