导图社区 Git
Git入门,Git是目前世界上最先进的分布式版本控制系统(没有之一)。 Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。
编辑于2023-07-26 13:53:19 山东省Git
简介
Git是什么
Git是目前世界上最先进的分布式版本控制系统(没有之一)。 Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。 GitHub是一个基于Git的远程文件托管平台(同GitCafe、BitBucket和GitLab等)。 Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要结合GitHub来使用。使用场景: 无GitHub:在本地 .git 文件夹内维护历时文件 有GitHub:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库
Git的历史
同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。 到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统制订了若干目标: - 速度 - 简单的设计 - 对非线性开发模式的强力支持(允许上千个并行开发的分支) - 完全分布式 - 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量) 自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,它还有着令人难以置信的非线性分支管理系统,可以应付各种复杂的项目开发需求。
Git的工作流程
从远程仓库中克隆 Git 资源作为本地仓库;
从本地仓库中checkout代码然后进行代码修改;
在提交本地仓库前先将代码提交到暂存区;
提交修改,提交到本地仓库;本地仓库中保存修改的各个历史版本;
在需要和团队成员共享代码时,可以将修改代码push到远程仓库。
Git的几个核心概念
工作区
工作区,就是你平时存放项目代码的地方
暂存区
暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息
版本库
仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
远程仓库
远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
操作
配置级别
系统上所有用户
git config --system 配置项
例如:git config --system core.longpaths true
系统上当前用户
git config --global 配置项
例如:git config --global core.longpaths true
当前仓库
git config 配置项
例如:git config core.longpaths true
配置
查看所有配置
git config --list git config -l
查看某一配置项
git config core.longpaths
配置用户邮箱
git config --global user.name "用户" git config --global user.email "邮箱"
PowerShell显示中文
git config --global core.quotepath false git config --global gui.encoding utf-8 git config --global i18n.commit.encoding utf-8 git config --global i18n.logoutputencoding utf-8 $env:LESSCHARSET='utf-8' [environment]::SetEnvironmentvariable("LESSCHARSET", "utf-8", "Machine")
仓库
显示所有远程仓库
git remote
查看当前仓库传输代码使用的协议(ssh或者https)
git remote -v
推送本地已有仓库到远程仓库
git remote add origin https://gitee.com/wsdhla/mr-doc.git
修改协议
git remote rm origin git remote add origin git@gitee.com:wsdhla/orders.git git push -u origin master
显示某个远程仓库的信息
git remote show [remote]
来查看有关于origin的一些信息
git remote show origin
删除与<name>关联的过时引用。默认情况下,<name>下过时的远程跟踪分支会被删除,但根据全局配置和远程的配置,我们甚至可能会修剪尚未推送到那里的本地标记。
git remote prune origin
添加远程版本库 给远程仓库起别名,这样不需要每次都输入远程仓库地址
git remote add [shortname] [url]
删除远程仓库
git remote rm name
修改仓库名
git remote rename old_name new_name
仓库初始化
git init --initial-branch=dev
场景
全局设置
git config --global user.name "Fengliang Tian" git config --global user.email "tianfl@inspur.com"
拉取一个空仓库
git clone ssh://git@git.iec.io:6060/lsvo/fpln/fplnbuddecpschdbusi.git cd fplnbuddecpschdbusi git switch -c dev touch README.md git add README.md git commit -m "add README" git push -u origin dev
推送一个已存在的文件夹
cd existing_folder git init --initial-branch=dev git remote add origin ssh://git@git.iec.io:6060/lsvo/fpln/fplnbuddecpschdbusi.git git add . git commit -m "Initial commit" git push -u origin dev
推送一个已存在的本地仓库
cd existing_repo git remote rename origin old-origin git remote add origin ssh://git@git.iec.io:6060/lsvo/fpln/fplnbuddecpschdbusi.git git push -u origin --all git push -u origin --tags
用命令行创建一个新本地仓库
echo "# conf-test" >> README.md git init git add README.md git commit -m "first commit" git branch -M main git remote add origin git@github.com:wsdhla/conf-test.git git push -u origin main
用命令行推送一个已存在的本地仓库
git remote add origin git@github.com:wsdhla/conf-test.git git branch -M main git push -u origin main
提交到本地库(需要先提交到暂存区)
git add . git comit -m [提交信息]
分支
查看所有分支,包括远程和本地
git branch -a
查看本地仓库分支
git branch
查看远程仓库分支
git branch -r
本地分支与远程分支的关联关系
查看本地分支与远程分支的关联关系
git branch -vv
建立本地分支与远程分支的关联关系
git branch --set-upstream-to=origin/远程分支 本地分支 git checkout -b 本地分支 origin/远程分支
取消关联
git branch --unset-upstream 本地分支
或者(-u 等同于 --set-upstream-to)
git push -u origin 本地分支:远程分支
创建分支
git branch 分支
删除分支
删除本地分支
git branch -d git branch -d -f git branch -D 本地分支
删除远程分支
git push origin :远程分支 git push origin --delete 远程分支
移动或重命名分支
git branch -m git branch -m -f git branch -M
切换分支
git checkout 分支 git switch 分支
从远程仓库检出新分支
git checkout -b 本地分支 origin/远程分支
创建并切换分支
git checkout -b 分支 git switch -c 分支
拉取分支
git pull
git fetch + git merge
克隆分支
git clone [url]
推送远程分支
git push [远程库地址,一般为origin] [远程库分支]
合并分支到当前分支
git merge 被合并的分支
强制合并
git merge --strategy-option=theirs 被合并的分支 git merge --strategy-option=ours 被合并的分支
查看版本差异
查看本地分支与本地当前分支的差异
git diff 本地分支
查看远程分支与本地分支的差异
git log -p 本地分支..origin/远程分支
查看提交拓扑结构
git log --graph --oneline --branches --all git log --oneline --graph --decorate --all
提交历史
git reflog
git log git log 某文件 git log # 查看历史提交记录,默认为 新---> 旧,即最新的在最上面 git log --oneline # 一行的形式查看提交记录 git log --graph # 开启拓扑图选项 git log --reverse # 由旧到新查看提交记录 git log --author <authorName> # 查看指定提交人的提交记录 git log [ --since | --before | --until | --after ] <time> # 查看指定时间段的提交记录
若报错fatal:‘XXX' is not a commit and a branch ‘XXX' cannot be created from it
git branch -r git branch git fetch origin git remote update origin --prune git branch
标签
删除本地标签
git tag -d 本地标签
推送一个本地标签
git push origin 本地标签
推送全部未推送过的本地标签
git push origin --tags
删除远程标签
git push origin :refs/tags/远程标签
回退
回退到上一版本
git reset HEAD^
回退到指定的版本号
git reset 版本号 git reset --hard 版本号 git reset [--soft | --mixed | --hard] [HEAD] # –mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。 # –soft 参数用于回退到某个版本。只有本地库回退到指定版本。 # –hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。三个区都同步
将文件从暂存区撤销到工作区
git restore --staged 文件
还原工作区的修改
git checkout 文件
撤销处于工作区内的文件修改
git restore 文件
只是修改commit注释
git commit --amend
从版本控制移除文件(只从暂存区删除,继续保留在工作区)
git rm --cached 文件 git rm --cached .
场景
本地修改内容不保留,直接回退,再pull
git reset --hard git pull origin <branch>
本地修改内容保留
git stash #备份工作区内容 git pull origin <branch> #拉取远程分支 git stash pop #恢复工作区内容
以下未跟踪的工作树文件将被合并覆盖
git clean -dfn git clean -df
实际上不要删除任何内容,只需显示将要执行的操作
git clean -n git clean --dry-run
强制运行,如果clean.requireForce没有被配置为false,git clean就必须要带上-f或-i才会清除
git clean -f