Git基本语法

mac2026-01-01  0

文章目录

1、Git简介1 什么是Git2 集中式与分布式:1 集中式版本控制系统2 分布式版本控制系统 3 安装Git1 运行平台2 安装2.1 Linux2.2 Windows 4 创建版本库[^1]1、创建一个空目录2、初始化一个Git仓库3、把文件添加到版本库里:(将文件修改加入暂存区) 2、Git基本语法1 回退回归版2 工作区和暂存区3 撤销修改4 删除文件 3、远程仓库1 添加远程库2 从远程库克隆 4、分支管理1 创建与合并分支2 解决冲突3 普通合并分支4 Bug分支5 Feature分支6 推送抓取分支7 Rebase[^3] 5、标签1 创建标签2 删除标签 6、GitHub与码云1 GithHub[^4]2 码云[^5] 7、自定义Git1 忽略特殊文件2 配置别名3 搭建Git服务器

1、Git简介

1 什么是Git

​分布式版本控制系统,C语言开发

2 集中式与分布式:

所有的版本控制系统,只能跟踪文本文件的活动,版本控制系统可以告诉你它每次的改动;而无法跟踪二进制文件1

1 集中式版本控制系统
特点:版本库集中存放在中央服务器工作方式:先从中央服务器中取出最新版本,在自己电脑上修改,再传回至中央服务器缺点:必须在联网状态下才能工作SVN是目前应用最广泛的集中式版本库控制系统
2 分布式版本控制系统
特点:没有中央服务器,每个人的电脑上都是一个完整的版本库协作:把修改的部分推送给对方,分布式版本控制系统通常也有一台电脑充当“中央服务器”,方便交换大家的修改优势: 安全性高不需要互联网的支持 分布式版本控制系统:Git、BitKeeper、Bazaar、Mercurial等。

3 安装Git

1 运行平台

​Linux、Unix、Windows、Mac

2 安装
2.1 Linux

ebian或Ubuntu Linux,通过sudo apt-get install gita 安装

2.2 Windows

​安装完成后,设置姓名与邮箱: ​$ git config --global user.name "name" ​$ gitconfig --global user.email "email" ​参数--global : 表示这台计算机上所有的Git仓库都会使用这个配置

4 创建版本库2

1、创建一个空目录
2、初始化一个Git仓库

git init ​.git的目录是Git来跟踪管理版本库的

3、把文件添加到版本库里:(将文件修改加入暂存区)
将文件添加到仓库,文件一定要放在learngit目录下,可以反复使用,添加多个文件 git add <file>将文件提交到仓库:(将暂存区的所有内容提交到当前分支) ​git commit -m "message"

2、Git基本语法

1 回退回归版

Git可以在版本之间移动,使用命令git reset --hard commit_id。回退前,用git log可以查看提交历史,以便确定要退到哪个版本,英文状态下按下q键回归前,用git reflog查看命令历史,以便确定要回到哪个版本

2 工作区和暂存区

工作区:能在电脑里看见的目录,如:learngit。暂存区:在版本库里起过渡作用的,git add是把文件传到暂存区里。 文件夹里的目录.git为Git的版本库,其中存了很多东西,最重要的就是称为stage(或者叫index)的暂存区。 Git会自动创建了第一个分支master,以及指向master的一个指针叫HEAD。 每次修改都要把文件提交给暂存区,才能commit

3 撤销修改

当文件保存后才能进行操作

改乱文件内容,但还未添加至暂存区时,用git checkout -- file。改乱文件内容,且添加至暂存区时,用git reset HEAD file回到步骤1,然后按步骤1执行。已经将文件提交到了版本库中,在未远程推送之前,可以先进行版本回退。

4 删除文件

删除文件rm file后,工作区和版本区会不一致,有两种选择

从版本库中删除:git rm并且git commit恢复到最新版本:git checkout -- file(是用版本库里的版本替换工作区的版本)

3、远程仓库

1 添加远程库

在GitHub上创建一个库

关联一个远程库,用命令 git remote add origin git@github.com:oouapatia/learngit.git 如果关联错误,用git remote rm origin清除。关联后,第一次用git push -u origin master推送master分支所有内容。用git push origin master推送最新的修改。

2 从远程库克隆

用git clone git@github.com:oouapatia/gitskills.git克隆 Git支持多种协议,https,但通过ssh支持的原生git更快

4、分支管理

1 创建与合并分支

master分支,HEAD指向master,master指向提交,so,HEAD指向的就是当前分支

创建分支:增加一个dev指针,改变HEAD指向(改变后,对工作区的修改和提交就是对dev分支,而master分支不变) git checkout -b dev ( git checkout加上-b表示创建并切换)

相当于以下两条分支: git branch dev创建分支 git checkout dev切换分支

​ git branch列出所有分支,并且在当前分支前会有一个* 2. 合并分支:把master指向的dev的当前提交 git merge name 命令用于合并指定分支到当前分支 3. 删除分支 git branch -d dev

2 解决冲突

一个分支与另一个分支内容不同时,进行合并会出现冲突。 Git的用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

Git无法合并分支时,需要手动解决冲突,然后在提交 用git log --graph 查看分支合并历史 提交后已经是合并后的结果,不需要再进行合并,直接删除分支即可

3 普通合并分支

合并分支时,通常情况下,Git会用Fast forward 模式,但删除分支后,会丢掉分支信息。 强制禁用Fast forward 模式,Git会在merge时生成一个新的commit,这样可以在分支历史上看出分支信息 git merge --no-ff -m "" branch_name (--no-ff参数表示禁用Fastforward,-m参数把commit描述进去) git log --graph --pretty=oneline --abbrev-commit查看分支历史 合并分支时

加上--no-ff参数就可以用普通模式合并,会记录合并历史而fast forward合并没有合并历史记录.

4 Bug分支

首先确定在哪个分支上修复bug,在此分支上创建新的bug分支来修复,修复完成,然后合并,最后删除临时分支

创建临时分支之前需要查看工作区是否干净,干净则创建分支来修复bug当工作未完成时,需先将工作现场git stash一下,然后修复bug,再git stash pop,回到工作现场 git stash 功能:把当前工作储存起来,在恢复现场后继续工作 git stash list查看stash记录 git stash pop ,恢复的同时将stash内容删除 git stash apply 恢复,但并未删除stash内容,需要用git stash drop

5 Feature分支

每添加一个新功能,最好新建一个feature分支

新建feature分支(git checkout -b feature)在上面开发,完成后,合并(git checkout dev)最后,删除该feature分支。 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

6 推送抓取分支

要查看远程库的信息,用git remote,或者用git remote -v显示更详细的信息

推送分支 git push origin branch-name master分支是主分支,需要时刻与远程同步dev分支是开发分支,也需要与远程同步bug分支只用于在本地修复bug,不用推到远程feature分支是否推到,取决于是否在上面合作合作开发 抓取分支 1、用git pull把最新的提交从远程仓库抓下来2、在本地合并,解决冲突,再推送3、git pull失败,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接 git branch --set-upstream-to=origin/dev dev4、合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突一样 多人协作的工作模式: 用git push origin <branch-name>推送自己的修改;如果推送失败,则因为远程分支比你的本地更新,需要先用git pull合并;如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送。 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;

7 Rebase3

5、标签

1 创建标签

git tag name 创建标签,标签默认打在最新的commit上(HEAD) git tag name commit id 指定要创建的标签的位置 git tag -a name -m "" 创建带有说明的标签 git tag 查看所有标签 git show tagname 查看标签信息

2 删除标签

git tag -d name 删除本地标签 git push origin name 推送标签到远程 git push origin --tags 推送所有未推送的标签到远程 git push origin :refs/tags/name 删除远程标签

6、GitHub与码云

1 GithHub4

在GitHub上,可以任意克隆开源仓库自己有克隆后的仓库的读写权限可以推送pull request给官方仓库来贡献代码

2 码云5

7、自定义Git

1 忽略特殊文件

在Git工作区的根目录下创建一个特殊的.gitignore文件,把需要忽略的文件名加入,将.gitignore提交到Git 配置文件:https://github.com/github/gitignore 忽略文件的原则:

忽略操作系统自动生成的文件,比如缩略图等;忽略编译生成的中间文件、可执行文件等,比如Java编译产生的.class文件;忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

2 配置别名

配置

git config --global alias.co checkout //checkout git config --global alias.ci commit //commit git config --global alias.br branch //branch git config --global alias.unstage 'reset HEAD' //把暂存区的修改撤销掉 git config --global alias.last 'log -1' //显示最后一次提交信息

–global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。 每个仓库的Git配置文件放在.git/config文件中 当前用户的Git配置文件放在用户主目录下的.gitconfig文件夹中: **删除** 别名就在[alias]`后面,要删除别名,直接把对应的行删掉即可

3 搭建Git服务器

运行Linux的机器

安装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每次一登录就自动退出。 6.克隆远程仓库: 现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

git clone git@server:/srv/sample.git

Git跟踪并管理的是修改


图片、视频、word文件等 ↩︎

版本库(仓库),repository,里面的所有文件都可以被Git管理,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来的某个时刻可以“还原”。 ↩︎

把本地未push分支的提交历史整理成直线 git rebase改变本地的提交位置 ↩︎

免费托管开源代码的远程仓库 ↩︎

国内的Git托管服务 关联码云远程库与GitHub一致 可以同时使用GitHub与码云,使用多个远程库时,需要用不同的名称来标识不同的远程库 ↩︎

最新回复(0)