Git 的正确使用姿势与最佳实践 | 豆包MarsCode AI刷题

86 阅读5分钟

简介

Git是一个分布式版本控制系统,由Linus Torvalds创建。Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

安装

Windows

下载地址:Git官网

Linux

sudo apt-get install git

Mac

brew install git

创建版本库

版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:

mkdir learngit
cd learngit
pwd

pwd命令用于显示当前目录。 第二步,通过git init命令把这个目录变成Git可以管理的仓库:

git init

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

添加文件到版本库

第一步,使用命令git add ,注意,可反复多次使用,添加多个文件; 第二步,使用命令git commit -m ,完成。

git add readme.txt
git commit -m "wrote a readme file"

注意:readme文件需要放在learngit目录下(子目录也行)

时光机穿梭

版本回退

git status #查看状态
git diff #查看修改内容

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

git reset --hard HEAD^ #回退到上一个版本
git reset --hard HEAD^^ #回退到上上一个版本
git reset --hard HEAD~100 #回退到前100个版本
git reset --hard 1094a #回退到指定版本

工作区和暂存区

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。 Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。 img.png

管理修改

每次修改,如果不用git add到暂存区,那就不会加入到commit中。

撤销修改

git checkout -- readme.txt #丢弃工作区的修改
git reset HEAD readme.txt #撤销暂存区的修改

删除文件

rm test.txt
git rm test.txt #删除版本库中的文件

远程仓库

添加远程仓库

git remote add origin git@server-name:path/repo-name.git

推送分支

git push -u origin master

克隆远程仓库

git clone git@server-name:path/repo-name.git

分支管理

创建与合并分支

git checkout -b dev #创建并切换到dev分支
git branch #查看当前分支
git merge dev #合并指定分支到当前分支
git branch -d dev #删除dev分支

解决冲突

git log --graph --pretty=oneline --abbrev-commit #查看分支合并图
git merge --no-ff -m "merge with no-ff" dev #禁用Fast forward模式,Git就会在merge时生成一个新的commit

分支管理策略

git merge --no-ff -m "merge with no-ff" dev #禁用Fast forward模式,Git就会在merge时生成一个新的commit

BUG分支

git stash #把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list #查看工作现场
git stash apply #恢复工作现场
git stash drop #删除stash内容
git stash pop #恢复的同时把stash内容也删了

Feature分支

git branch -D feature-vulcan #强行删除一个没有被合并过的分支

多人协作

推送分支

git push origin master #推送master分支
git push origin dev #推送dev分支

抓取分支

git checkout -b dev origin/dev #在本地创建和远程分支对应的分支
git branch --set-upstream dev origin/dev #建立本地分支和远程分支的关联
git pull #抓取分支

标签定义

创建标签

git tag v1.0 #在当前commit打上标签
git tag v0.9 622493 #在commit id为622493的commit打上标签
git tag -a v0.1 -m "version 0.1 released" 362816 #创建带有说明的标签

操作标签

git tag -d v0.1 #删除标签
git push origin v1.0 #推送标签到远程
git push origin --tags #一次性推送全部尚未推送到远程的本地标签
git push origin :refs/tags/v0.9 #删除远程标签

自定义Git

忽略特殊文件

git add -f App.class #强制添加App.class文件
git check-ignore -v App.class #查看忽略规则

配置别名

git config --global alias.st status #配置status的别名为st
git config --global alias.unstage 'reset HEAD' #配置unstage的别名为reset HEAD
git config --global alias.last 'log -1' #配置last的别名为log -1
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" #配置lg的别名为log --color --graph

Egit

安装Egit

sudo apt-get install egit

配置Egit

使用Egit

常用命令

image.png

遇到问题

问题1

error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)
error: 55053 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output

分析: 一般这种情况都是因为项目分支过多,导致你要下载的东西太多,从而引起这个问题

git config --global core.compression -1 #关闭压缩
git config --global core.compression 0