搜 索

Git教程笔记

  • 7.1k阅读
  • 2021年07月13日
  • 43评论
首页 / 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
...
评论区

反贪风暴5最终章

女人街再见了

帕洛玛之旅

丹佛圣诞节

自由时间

他她他她

开心鬼2之开心鬼放暑假

大蛇2

这是汤姆格林的纪录片

夜舍

鬼神警察

熊猫计划

地狱来的女人

嘿乔

浪潮

编号17

餐桌上的心声詹娜的初恋

大漠追云剑

你的每一次呼吸

相扑男孩

亮剑之血债血偿

王牌

自由

宗师叶问

悬赏

a计划

HeyJoe

圣诞大赢家

罪孽成佛

三个秘密

黑白潜行2

真爱找麻烦

我要我们在一起

vuwvdagrhl 2025年3月3日 09:20
回复

文化差异分析可再深化以避免误读。

dmzlcqpoam 2024年12月08日 19:35
回复

你的文章让我学到了很多技能,非常实用。 https://www.yonboz.com/video/64687.html

bgxaqfuzds 2024年11月23日 18:24
回复

你的文章让我学到了很多技能,非常实用。 http://www.55baobei.com/zzgzkUf6ue.html

wejusfjcus 2024年11月22日 05:11
回复

《凶案深处》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/21116.html

eymlxwusfe 2024年11月18日 16:19
回复

你的才华让人惊叹,你是我的榜样。 http://www.55baobei.com/dSIvonRSDq.html

oemikfmhif 2024年11月14日 01:15
回复

真好呢

swsgtoagvx 2024年10月04日 21:03
回复

看的我热血沸腾啊https://www.ea55.com/

kdhiabdceg 2024年09月27日 12:16
回复

怎么收藏这篇文章?

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