搜 索

Git教程笔记

  • 1.6k阅读
  • 2021年07月13日
  • 2评论
首页 / Tools / 正文

Git(参考廖雪峰)

每标题下的代码块都有本小节要学到的全部命令行(便于查询)
本教程参考廖雪峰老师的网站教程
最官方权威的学习教程在这

创建版本库

git init
git add <file>
git commit -m <message>
  • 添加readme.txt:用vscode编辑,Windows自带记事本会出现字符问题。
Git is a version control system.
Git is free software.
  • git init 初始创建repository
  • 初始化一个Git仓库,使用git init命令。
  • 添加文件到Git仓库,分两步:
  1. 使用命令git add <file>,注意,可反复多次使用,添加多个文件;
  2. 使用命令git commit -m <message>,完成。

Time Machine

版本回退

git log 
git relog
git reset --hard (commit id)
  • git loggit log --pretty=oneline查看版本提交日志信息。
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
  • 回退到某个head版本:git reset --hard HEAD^
此时HEAD版本就没了,时光倒退
  • 但如果还记得此前版本号可以用命令
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
  • 现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:
$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

工作区和暂存组

git  status//查看当前修改的信息状态

![image-20210712160931710](C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20210712160931710.png)

  • git add在暂存区修改,git commit一次性提交暂存区的所有修改到master分支。
  • 可以在工作区添加一个LICENSE文件
  • 先在工作区修改readme.txt文件,然后用git status查看当前状态
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   readme.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    LICENSE

no changes added to commit (use "git add" and/or "git commit -a")

Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked

现在,使用两次命令git add,把readme.txtLICENSE都添加后,用git status再查看一下

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   LICENSE
    modified:   readme.txt
git修改逻辑是 在workspace修改要add进暂存区再commit,是分三个区域管理的,git跟踪存储的是修改记录。

修改管理撤销删除

git checkout -- <file>  //检查是否和上一步一样并撤销
git reset HEAD <file>  //撤销升级版之返回原点
git rm <file>
  • 命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

    • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    总之,就是让这个文件回到最近一次git commitgit add时的状态。

  • git reset之前是git reset --hard (commit id)将工作区回退之前的版本,但用git reset HEAD <file>可以将暂存区未commit的修改撤销并且将工作区回退HEAD所表示的最新版本。

总结一下,我们工作需要三个过程,在工作区修改—>add加入暂存区—>commit提交暂存区修改到master,checkout帮我们撤销三步中上一步的操作,reset是可以从repository库master分支中撤回我们前面两步的操作。

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

  • 说一说删除,如果只是rm在工作区删除,add加入暂存区也是一样效果
  • git rm =rm+add ,然后再commit。

远程仓库

ssh连接、上传、删除

ssh-keygen -t rsa -C "<邮箱>" //创建公钥
git remote add origin git@gitee.com:blacksevenbsw/xxx  //此处参考自己的ssh地址
git push -u origin master  //第一次添加-u直接将本地master的全部分支加入名叫origin的线上master里面
git push origin master  //添加到线上,之后用这个就行
git remote rm <name> //删除,(不能真正删除,要登陆网站删除)
  1. 创建SSH key,执行下列代码(Shell或Git Bash)
ssh-keygen -t rsa -C "<邮箱>"
  1. 在user目录下找到.ssh文件:里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
  2. 登陆github或gitee进入设置添加公钥。这样你的github或者gitee账户就允许这台电脑连接访问了。( •̀ ω •́ )✧
git remote add origin git@gitee.com:blacksevenbsw/xxx   
git push -u origin master
  • 把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

git remote -v
git remote rm <name>
  • 此处删除-v是查看远程库信息
  • 此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub/GITEE,在后台页面找到删除按钮再删除。

克隆

git clone git@gitee.com:Blacksevenbsw/xxx
//这里加链接就行

ssh或http链接。

  • Git支持多种协议,包括https,但ssh协议速度最快。

分支管理

创建和合并

master是一条修改文件记录的时间线的主线,如果想获得分叉branch也是可以做到的。
git checkout -b dev  //创建一条名叫dev的分叉
=
git branch dev     //创建dev分支
+
git checkout dev     //切转到这个分支
****************************************
git branch   //查看当前分支
git merge dev   //合并dev分支到目前切换的分支(有点像复制)
git branch -d dev   //删除dev分支
//使用新的 switch命令,比checkout好理解
git switch -c dev   //创建并切换
git switch master   //切换到主线

![image-20210713202234272](C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20210713202234272.png)

解决冲突

如果修改完一个文件后commit,又切换分支后,接着修改同一个文件然后commit,再去合并就会出现冲突。

此时需要修改内容后,重新add再commit,接着合并就可以了。

流程如下:

git switch -c branch1
修改readme.txt......
git add readme.txt
git commit -m "blabla 1"
********切换分支*********
git switch master
修改readme.txt......
git add readme.txt
git commit -m "blabla2"
********准备合并*********
git merge branch1
出现冲突.......
修改保留文件内容.......
git add readme.txt
git commit -m “conflict fixed”
git log --graph   //此命令查看分支合并图

![image-20210713212050437](C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20210713212050437.png)

分支管理

在合并举例中,在目前master上直接创建并转到新的分支比如branch1,接着修改commit后切回master再merge,就会出现fast forward模式合并,意思是切换回去的头指针HEAD直接将master的下一步指向dev,dev就不是原本的分支,加入到了master原定的主线里。

但在这里可以禁用fast forward模式的合并,这样的好处是在查看修改记录时就有了分支记录。如果是ff模式就查看不到曾经加过分支并且合并的记录。

git switch -c dev
修改文件.....
git add readme.txt
git commit -m "add merge"
git switch master
git merge --no-ff -m "merge" dev   //禁用fast forward模式合并
//合并完成
//查看合并信息
git log --graph --pretty=oneline --abbrev-commit
*   e1e9c68 (HEAD -> master) merge with no-ff
|\  
| * f52c633 (dev) add merge
|/  
*   cf810e4 conflict fixed
...
评论区
Blackseven 2021年07月24日 03:27
回复

某视频课代表
1、技能学习平台:哔哩哔哩、中国大学慕课、coursera、edX
2、软件操作:up主:oeasy、doyoudo、星月兮、Genji是真想教会你、旁门左道PPT、Excel自学成才、我是于干,+实战演练
3、编程:基础:菜鸟教程、进阶:CSDN、Github、stackoverflow、leetcode
4、英语:四六级尽早考+买真题,进阶:扇贝、中国日报网英语点津、Italki、Audible、NPR.org、考满分
5、二外:最好找老师,入门:多邻国
6、计算机二级:学校基础课、买题库,up主:小黑课堂计算机二级
7、其他:学吧导航
8、论文下载:学校图书馆或省市图书馆,知网、Web of Science、图书馆官网直接检索、SCI-HUB、Library Genesis、Z-Library
9、电子书:某宝、读秀、超星、书格、七彩英语、古腾堡计划、manybooks、鸠摩搜索、Library Genesis
10、PPT模板:OfficePLUS、PPT超级市场、51PPT模板、PPT汇、优品PPT、HiPPTer​

Blackseven 2021年07月14日 10:03
回复

还有一部分分支教程暂时用不到,那个比较复杂了对我来说=-=,之后再更

avatar