【廖学峰的Git教程】学习笔记

本文详细介绍了Git的基本概念和常用命令,包括工作区、暂存区、版本库和远程库的区别。讲解了从初始化工作空间到提交、推送、分支管理、远程仓库操作、版本回退以及解决冲突等全过程。还涉及了多人协作开发的模式和策略,如分支合并、远程仓库的关联及推送,以及标签管理。此外,还提到了Git的配置、别名设定、忽略文件和搭建Git服务器等高级操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

git学习笔记

基本概念

工作区:开发人员本地机器中的代码文件存放的位置(本地可见)

暂存区:是开发人员可以随意修改的一个区域,相当于在真正提交前的一个整理的空间

版本库:git为我们创建的一个分支,一般是master

远程库:多个开发人员的一个中央控制机

常用命令

基础命令

1.建议选择一个空的文件夹作为工作空间,执行命令初始化工作空间

git init

执行git init后,工作空间会出现一个.git的隐藏文件,这个文件就是git仓库

2.提交代码命令,提交代码分为两个步骤,首先将代码提交到暂存区,然后才能上传到master


第一步,将工作区的代码提交到暂存区
git add 文件名

第二步,将暂存区的代码提交到仓库
git commit -m “文字描述”
    
第三步,将仓库中的文件提交到主干
git push -all

以上命令的参数记不住的话,可以输入git + 关键字,就会出现提示,根据提示选择参数,git shell还是很人性化的。

3.假如不知道仓库中是否是最新代码,或者想知道仓库和暂存区的相关信息,可以使用命令来查询当前状态

git status

4.当工作区和暂存区、暂存区与仓库之间的代码冲突可以使用命令查看修改

git diff 文件名称

5.查看提交的历史记录命令

git log

6.版本回退


git reset --hard HEAD^(此处的肩括号有几个就表示回退到第几次提交,这个方法不够优秀

git reset --hard 版本号(版本号写前六位即可,git会自动查询)

7.版本前进
如果回退后,再想前进,使用会退命令加上想要前进的版本号即可,也就是说想跳到那个版本,只要指定版本号即可
如果忘记版本号也不要怕,git为我们提供这样的人性化的命令可以查询到前进的版本号

git reflog

远程仓库

1.创建ssh-key命令

查看git的所有配置
git config --list

设置git的用户名
git config --global user.name “用户名”

设置git的邮箱
git config --global user.email “邮箱”

生成git的公钥和密钥
ssh-keygen -t rsa -C "youremail@example.com"

执行完命令,会在当前文件夹生成两个文件id_rsa(秘钥)和id_rsa.pub(公钥),秘钥保留在本地,只能自己知道,公钥填写到gitlab上,这样就形成远程仓库和本地的关联

2.创建一个远程仓库
通过gitlab添加一个仓库,可以添加一个readme文件,用来测试能否成功下载到本地,执行命令,将gitlab中的仓库下载到本地


git remote add origin git@github.com:michaelliao/learngit.git

3.把远程仓库跟新到本地工作空间


git clone git@github.com:michaelliao/gitskills.git

4.本地库推送到远程库
在当前库中运行cmd,执行以下命令(第一次推送添加参数“-u”,以后推送不用添加)


git push -u origin master

5.分支—分支就是一条时间线
为了保证仓库的安全性,git的提交过程为(本地工作空间–>暂存区–>仓库–>分支–>远程仓库)

6.创建分支


创建一个名称为dev的分支
git branch dev

切换到新建的分支
git checkout dev

以上两条命令合并执行
git checkout -b dev

查询本地分支
git branch

查询远程仓库的分支
git branch -a

7.合并分支
切换回master分支,执行合并命令

git merge dev

8.删除分支

git branch -d dev

9.解决冲突
当两个分支上的内容不同,并且合并这两个分支的时候出现的问题,此时需要我们手动的解决冲突,然后再提交

使用命令查看分支进行图

git log --graph
实例:git log --graph --pretty=oneline --abbrev-commit

10.合并策略
合并dev到master上


git merge --no-ff -m "merge with no-ff" dev

合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

11.隐藏、恢复当前分支


隐藏命令
git stash

查看隐藏列表
git stash list

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了

12.强行删除分支命令


git branch -D feature_name

13.查询远程库信息


查询远程库信息
git remote

查询远程库详细信息
git remote -v

14.协作开发
当多人协作开发时,别人克隆代码只有master分支,无法看到你的dev分支,这是执行命令,克隆指定的分支


克隆指定的分支
git checkout -b dev origin/dev

15.两人同时推送时,后推送的那个人和远程仓库不同,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送;git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接


git branch --set-upstream dev origin/dev

16.多人协作的工作模式通常是这样:
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。


创建本地分支和远程分支的链接关系
git branch --set-upstream branch-name origin/branch-name

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

17.创建标签


创建标签
git tag 【tag_name】

补写标签
git tag 【tag name】 【commit id】

查看标签
git show 【tag name】

18.删除标签


git tag -d 【tag name】

19.推送标签


git push origin 【tag name】

20.一次性推送全部尚未推送到远程的本地标签


git push origin --tags

21.查询当前tag列表


git tag

22.删除远程标签


先删除本地标签
git tag -d 【tag name】

再删除远程标签
git push origin :refs/tags/【tag name】

23.关联码云
注册码云后,添加公钥,将本地和码云关联起来


git remote add origin git@gitee.com:liaoxuefeng/learngit.git

24.git关联远程库同时关联码云


仍然以learngit本地库为例,我们先删除已关联的名为origin的远程库:
git remote rm origin

然后,先关联GitHub的远程库:
git remote add github git@github.com:michaelliao/learngit.git

接着,再关联码云的远程库:
git remote add gitee git@gitee.com:liaoxuefeng/learngit.git

现在,我们用git remote -v查看远程库信息,可以看到两个远程库:

git remote -v
gitee    git@gitee.com:liaoxuefeng/learngit.git (fetch)
gitee    git@gitee.com:liaoxuefeng/learngit.git (push)
github    git@github.com:michaelliao/learngit.git (fetch)
github    git@github.com:michaelliao/learngit.git (push)

25.Git显示颜色


git config --global color.ui true

26.忽略文件
推送时会有不想推送到git的文件,我们可以编写.gitignore文件,将文件名填写到配置文件,这样推送时就会忽略这些文件。

27.配置别名


当我们执行命令git status,输入的长且容易错,所以我们可以设置命令,执行
git config --global alias.st status

设置后,执行git st和git status是相同的
每个仓库的Git配置文件都放在.git/config文件中

28.搭建自己的git服务器

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。

假设你已经有sudo权限的用户账号,下面,正式开始安装。


第一步,安装git:
	$ sudo apt-get install git

第二步,创建一个git用户,用来运行git服务:
	$ sudo adduser git
	
	第三步,创建证书登录:
	收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

第四步,初始化Git仓库:
	先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
	
	$ sudo git init --bare sample.git
	
	Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
	
	$ sudo chown -R git:git sample.git


第五步,禁用shell登录:

	出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
	
	git:x:1001:1001:,,,:/home/git:/bin/bash
	
	改为:
	
	git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
	
	这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

第六步,克隆远程仓库:
	现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
	$ git clone git@server:/srv/sample.git
	Cloning into 'sample'...
	warning: You appear to have cloned an empty repository.

剩下的推送就简单了。

git常用命令分类总结

配置
git config


基础操作
    创建版本库
    git init

    将文件添加到版本库,添加到暂存区
    git add

	回退暂存区里的文件
	git reset HEAD
	
	删除暂存区和分支上的文件,同时工作区也不需要
	git rm file_path
	
	删除暂存区或分支上的文件, 但工作区需要使用, 只是不希望被版本控制(适用于已经被git add,但是又想撤销的情况)
	git rm --cached file_path

    将文件添加到版本库,提交到仓库
    git commit

    查看仓库状态
    git status

    查看仓库中的具体修改
    git diff

    查看提交的历史记录
    git log

    查看提交的历史记录,显示单行
    git log --pretty=online

    查看命令历史
    git reflog

    版本回退
    git reset --hard

    回退到上个版本
    git reset --haed HEAD^

    回退到上上个版本
    git reset --haed HEAD^^

    回退到具体某个提交
    git reset --hard commit_id

    撤销修改,丢弃工作区的修改
    git checkout --file

    撤销修改,丢弃已经进入暂存区的修改
    git reset HEAD file

    删除文件
    git rm file

分支管理
    查看分支
    git branch 
    git branch -v
    git branch -av

    创建分支
    git branch branchname

    切换分支
    git checkout branchname
    
    合并分支
    git merge

    删除分支
    git branch -d

远程仓库
    添加远程仓库
    git remote add

    推送本地内容到远程仓库
    git Push

    从远程克隆仓库到本地
    git clone

    修改本地指向的远程仓库地址
    git remote set-url

    获取远程数据的变更
    git fetch
    git pull

    查看远程仓库的信息
    git remote [-v]

    建立本地分支和远程分支的关联
    git branch --set-upstream <Iname> origin/<mame>

    删除远程分支
    git push origin --delete branchname

标签管理
    创建标签
    git tag -a <tagname> -m <comment> <commit_id>

    查看标签,所有标签
    git tag

    查看标签,指定标签
    git show <tagname>

    删除本地标签
    git tag -d <tagname>

    删除远程标签
    git push origin:refs/tags/<tagname>
    git push origin --delete <tagname>
    git push origin:<tagname>

    推送标签到远程,单个标签
    git push origin <tagname>

    推送标签到远程,所有未推送的标签
    git push origin --tags

进阶操作
    查看工作区经过修改的文件(红色显示)
    git status

    将工作区文件添加到暂存区(变成绿色)
    git add

    删除暂存区指定文件,工作区不受影响
    git rm --cached 文件名

    用暂存区文件替换工作区文件(危险,会清除工作区中未添加到暂存区的改动)
    git checkout --文件名

    用HEAD指向的分支中的文件替换暂存区和工作区的文件(危险,会清除暂存区和工作区的改动)
    git checkout HEAD 文件名

    暂存命令
    git stash save "暂存的备注"

    查看暂存记录
    git stash list

    取回暂存代码
    git stash pop

    取消【取回暂存代码】
    git reset --hard

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值