git基本命令

gti stash使用场景

切换分支: git stash可以将但当前修改保存起来,之后可以直接切换分支开始其他分支的操作

合并代码: git stash保存当前分支修改,切换其他分支执行更新合并操作后, 切换之前的分支后通过 git stash pop来获取栈顶保存的修改来恢复到之前的修改

代码审查: 在进行代码审查时,可以通过git stash将修改保存,并切换到源代码分支进行对比审查

git stash命令用法
1`git stash save "message"`  保存当前工作目录状态到一个新stash,并添加一条可选的消息用来描述这个stash内容
2`git stash list` 查看当前保存的所有stash列表,对每个stash都有一个唯一的标识符和对应的描述信息
3`git stash show [stash]` 查看某个特定stash的变更内容,默认情况下会显示最新的stash,`git stash apply stash@{2}`
4`git stash apply [stash]` 将某个stash的变更应用到当前工作目录,这个stash不会从stash列表中移除,如果不指定stash唯一标识,默认会应用最新的satsh
5`git stash pop [stash]``git stash apply`类似,但在应用完stash后将该satsh从stash列表中删除
6`git stash drop [stash]`删除某个stash,从stash列表中移除,如果不指定stash唯一标识,默认删除栈顶stash(最新的stash),后面可以使用多个stash唯一标识将同时删除多个
7`git stash clear` 删除所有的stash,它会清除所有保存的stash记录
8`git stash branch barch_name [stash]` 创建一个新分支并将某个stash中的变更应用到新分支上.
9`git stash -p` 交互式地选择要保存的修改,即对每个修改进行确认
10`git stash -u``git stash --include-untracked`保存除了未跟踪的文件(Untracked file)外的所有修改
11`git stash --keep-index``git stash --no-keep-index`默认情况下`git stash`会保存所有已暂存的修改,使用 `--keep-index`选项可以只保存未暂存的修改
12`git stash --all`保存所有修改,保存暂存区和未暂存区的修改,以及未跟踪的文件
13`git restore --source=stash@{1} -- file_path`恢复某个特定的文件而不是整个stash
14`git clean`清除所有未跟踪的文件
切换分支开发
当你正在dev分支上开发时,接到一个紧急bug要改,如何在不提交dev的前提下,修改master分支的bug?

思路:
git stash //先把dev的修改“储藏”起来;
再切到master分支创建一个feature_bug01分支;在feature_bug01分支修改bug后,在将feature_bug01合并到master;
git stash pop //再返回dev分支恢复之前“储藏”起来的代码


方法一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;另一种方式是用git stash pop,恢复的同时把stash内容也删了

注意:你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:git stash apply stash@{0}


当你把feature_bug01合并到master分支后,突然想起dev上也有同样的bug,但是此时feature_bug01已被删除,如何只把master上feature_bug01所做的修改“复制”到dev分支?
git cherry-pick 4c805e2  //4c805e2是feature_bug01提交时的commit

git四种类型文件状态

已暂存的文件(Staged Files)

已暂存的文件是指在运行git add命令后,将修改的文件添加到暂存区(Stage/index)的文件.这些文件的修改已经被git记录,并准备好在下次提交的时候包含在版本历史中;如果使用git rm移出版本库,则变为Untracked File

未暂存的文件(UnStaged Files)

未暂存的文件是指已经被git跟踪,但其修改尚未添加到暂存区的文件,这种类型的文件有两种去处.通过git add变为暂存文件;使用git checkout则丢弃修改过的内容返回unmodify状态,git checkout即从git仓库中取出当前内容的最新记录覆盖当前已经修改的文件

通过 git add变为已暂存文件, git add支持通配符匹配

未跟踪的文件(Untracked Files)

未跟踪的文件是指尚未被git跟踪的文件,这些文件即没有被添加到git的版本控制中,也没有被列为git的索引(暂存区),未跟踪的文件可能是新创建的文件(从未git add),或者是已经在但未被git跟踪的文件(通过git reset --hard删除)

未修改的文件(Unmodify Files)

文件已经存储到git仓库,即版本库中的文件快照内容与工作区文件夹中完全一致.这种类型的文件可能存在两种状态,如果文件被修改将会变成Modified;

git三大分区

文件夹中没有文件时,该文件夹不会被内如到git版本控制中

工作区

git的工作区也就是我们平时编辑代码的目录文件夹

工作区<–>暂存区命令

git rm操作后需要commit后才会对本地版本库进行影响

`git add file_one fiel_two ` 将多个文件添加到暂存区 `工作区--》暂存区`
`git add dir` 添加指定目录到暂存区,包括子目录
`git add .`添加当前目录的所有文件到暂存区

`git rm fiel_path`当需要删除暂存区或分支上的文件,同时工作区也不需要该文件时使用,同时需要提交,提交后版本库中的文件也会被删除; 如 git rm other.log 删除本地库  工作区  暂存区该文件
`git rm --cached file_path` 当需要删除暂存区上的文件,但本地又需要使用,这时直接push后git仓库和暂存区中文件将会被删除,如果push之前重新add后git仓库及暂存区中该文件还是存在 `从暂存区撤销文件`
`git rm -r path` 递归删除某个文件下的所有文件
暂存区

暂存区就是一个临时防止修改文件记录的地方. git add 暂存区中的内容commit后,暂存区中还包含当前相关提交的所有文件的信息

暂存区<–>资源库(本地版本库)
`gti commit -m describetion` 将暂存区中的所有文件一次性提交到git仓库,-m是每次的提交描述信息 `暂存区--》版本区`

`git reset --mixed git仓库中的版本号` 把该版本号的提交的内容从git仓库位置回滚到暂存区 `【保留工作区、修改暂存区、修改版本库】(git reset默认的模式)`

`git reset HEAD 文件名`如果出现: 将不必要的文件commit或者上次提交有误或不想改变暂存区内容,只是想调整提交的信息 或 移除不必要的添加到暂存区的文件 `暂存区-->工作区`

`git reset HEAD^` 去掉上一次的提交(会直接变成add之前的状态),HEAD^表示回退到上一次版本 `暂存区-->工作区`

`git reset --soft HEAD^`去掉上一次的提交(变成add之后,commit之前的状态) 把该版本号提交的内容从暂存区位置回滚到工作区 `【保留工作区,保留暂存区、修改版本库】`

`git rm -r -cached filePath` 删除暂存区间中某个路径下的文件或文件夹,-r递归删 -cached指定文件为暂存区的文件
版本区(git本地仓库)

暂存区将修改后的文件内容存放到仓库中 git commit

资源库(版本库)<–>暂存区

`git reset --hard git仓库中的版本号` 把该版本号提交的内容从版本区位置回滚到工作区 `【修改工作区、修改暂存区、修改版本库】`

`git reflog` +  `git reset --hard 1094a`,前面一个指令用来获取每次执行的git操作的记录信息(唯一标识),后面指令通过唯一标识将回退到指定版本

`git checkout` 后面直接加文件名 将从暂存区将文件恢复到工作区,如果工作区已经存在该文件,则会选择覆盖; 后面直接添加【分支名】+ 【文件名】 则表示从对应分支拉取对应文件并覆盖工作区里的文件 `git仓库--》暂存区--》工作区`

`git ls-files` 查看本地版本库中提交的文件

新建代码库

`git init` 在当前目录新建一个Git代码库
`git init [project-path-name]` 新建一个目录,将其初始化为代码库
`git clone [url]` 下载一个项目和它的整个代码历史

文件状态查看

`git status fileName` 查看指定文件的状态
`git satus` 查看所有文件的状态

其他常用命令

`git config --list` 显示当前的git配置

`git config -e [--global]` 编辑git配置文件 [] 表示可选参数

初次commit之前,需要配置用户 邮箱以及用户名 --global 全局配置对所有的仓库生效
`git config --global user.email "[email protected]"`
`git config --global user.name "your name"`
`git config --global credential.hepler store` 存储密码 减少每次密码输入

`git +命令 --help` 调出git的帮助文档

`git --version` 查看git的版本

`git remote add origin [email protected]:michaelliao/learngit.git` 将本地仓库和远程仓库关联起来
`git push -u origin 分支名` 将本地git仓库所有内容推送到远程库上

`git clone -b 分支名 git链接` 从远程仓库拉取指定分支

`git remote -v`查看远程库的信息及其别名对应关系
`git remote show remote_name` 查看具体远端的详细信息
`git remote add remote_name remote_url` 添加一个新的远程分支并指定名称
`git push -u origin main:mian`将本地分支名main推送给远程仓库分支名main关联,origin为远程url别名,通过git remote -v查看
`git remote remove remote_name` 删除一个远程分支

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令:
`git branch --set-upstream-to branch-name origin/branch-name`
`git branch --set-upstream-to origin/dev dev`

`git config core.excludesfile .gitignore` 使用命令git config配置忽略配置文件.gitignore

`git pull 远程仓库别名 远程分支名称:本地分支`,如果远程仓库url的别名为origin,同时远程分支名称与本地当前所处的分支名相同时可以直接使用 `git pull`命令拉取

`alias command_alias="git command"` 将git执行命令直接使用别名命令代替,直接git控制台输入别名等价于输入该指定 如 alias graph="git log --online --graph --decorate --all"

分支操作命令

创建并切换分支
`git switch -c dev` 表示创建并切换分支
`git checkout -b dev` 表示创建并切换分支
`git branch dev` 创建分支dev
`git checkout dev` 切换分支,等同于 `git switch dev`

`git checkout -b branch_name commit_id` 恢复指定提交commit_id处的分支

`gti branch` 查看当前分支名称,该命令会列出所有分支,当前分支前面会有一个*`git branch -d dev`删除分支dev,如果分支没有合并过git会提示分支先合并
`git branch -D dev`强行删除

标签

==tag可以认为是一个`快照`,也可以被认为是一个标记,之后无论你怎么修改,都可以通过命令指定回滚到这个tag==

打标签: 首先切换到需要打标签的分支上
`git tag v1.0` 打一个新标签
`git tag` 查看所有本地标签

给以前提交的commit打标签
`git log --pretty=oneline --abbrev-commit` 查看历史提交的commit id
`git tag v1.0 commit_id` 对指定的commit id打标签
`git tag -a v1.0 -m describetion commit_id` 可以创建带有说明的标签用-a指定标签名 -m指定说明文字
`git log --graph --online` 查看分支树

`git tag -d v1.0`删除标签

`git push origin v1.0`推送某个标签到远程仓库origin
`git push origin --tags` 一次性推送全部本地标签到远程

如果标签已经推送到远程,要先删除本地标签,再从远程删除
`git tag -d v1.0`从本地删除
`git push origin :refs/tags/v1.0`从远程删除
`git show tagname`显示标签的详细信息
`git ls-remote --tags origin` 列出名为origin的远程存储库中的所有标签
`git tag -l [pattern]``git tag -l v1.*`列出所有以v1.开头的标签

建立新的分支,通过`git checkout -b  tagname` 将某个tag的内容直接复制到当前分支

`git commit --amend -m "新的提交信息"` 替换上一次提交
`git commit -a -m description` -a -m同时添加时表示对未add的文件进行暂存同时进行commit

远程拉取初始化git库

ssh方式
1.生成本地git bash公钥文件(一路回车)
ssh-keygen -t rsa

2.获取公钥文件信息
cat ~/.ssh/id_rsa.pub

3.Web网页端增加Key:
gitlab中的User中的Settings–>SSH Keys–>Add key

4.工程初始化:
git clone ssh://git@172.16.0.162:222/nlp-llm/llm-financialknowledgebase.git

git日志查看

`git log -number -5` 显示最近5`git log --oneline`获取所有的git提交记录commit id,简介信息,只包含commit_id和提交描述信息 
`git log --decorete` 显示分支名称
`git log --all`显示全部分支记录
`git log --first-parent`显示第一个父元素

举例:
`git log --online --graph --decorate -5` -5显示5条记录 --graph树形显示  --online简要显示commit id   --decorate显示commit id具体名称

文件区别

`git diff file` 查看指定文件与当前分支的中该文件的最新记录的差异
`git diff --stat`查看简单的diff结果

推送命令

`git push origin master` 将本地master内容推送到远程分支origin

`git push --set-upstream remote_name 分支名称`

`git push -f` 强制提交不管本地已远程的差异,提交本地代码

修改提交后的commit注释

修改最新一次提交的注释

1、在命令行输入如下命令,然后回车: git commit --amend

2、在命令行的最上面会显示上次提交的备注,然后我们需要进入编辑模式进行修改,按i键

3、开始编辑,修改备注

4、修改完成后,按Esc退出编辑模式

5、再按组合键 Shift + :

6、输入wq,然后回车(w的意思是保存,q的意思是退出,这一步也可以拆成两步:输入w按回车、输入q按回车)

7、修改完成,git push提交服务器

8、修改完成push后将无法在重新修改该提交的注释

分支合并

切换到主分支,`git merge branch_name`. 将分支branch_name合并到主分支


撤销操作

`git restore 文件1 文件2` 将add后的文件做的修改变撤销,变为add时的内容

`git restore --staged ` 将文件从暂存区回退到工作区,

 `git restore --worktree path/to/file` 文件Untrack同时未add时修改文件后使用该方式恢复文件修改

`git revert HEAD`撤销上一次提交(当前最新版本的下一个版本 HEAD^表示上一个版本)

`git checkout -- filename` 还未添加到暂存区,执行命令后会回退到未修改之前的状态(该文件已经push过)

`git reset HEAD filename` 已添加到暂存区,执行命令后会回退到工作区之前的状态,该模式默认为-mixed

`git reset --hard commit_id`reset --hard 会在重置 HEAD 和branch的同时,重置stage区和工作目录里的内容。
你的stage区和工作目录里的内容会被完全重置为和HEAD的新位置相同的内容。换句话说,就是期间的所有修改会被全部擦掉

`git reset commit_id` 保留工作目录,并且清空暂存区。也就是说,工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录。简而言之,就是「把所有差异都混合(mixed)放在工作目录中」

`git reset --soft [commit Id]` reset --soft 会在重置 HEAD 和 branch 时,保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区
>>三种模式都会撤销commit的提交,也就是本地仓库会回滚,提交记录的commit_id会被删除
>>soft  工作区(保留)、暂存区(保留)、本地仓库(回滚)
>>mixed 工作区(保留)、并将暂存区退回到工作区(不是删除,只是需要重新add)>>本地仓库(回滚)所以也叫混合模式
>>hard  工作区(删除)、暂存区(删除)、本地仓库(回滚)


`git revert [commitId]` 对commitId执行反向操作,恢复到commitId的上一个commitId的代码
: 提交的越早对应的提交fix:number中的number指越小
//生成多个反向commit,不需要解决冲突,从最新HAED开始回到倒数第三次提交
git revert HEAD~2..HEAD   // HEAD~2表示当前版本的上两个版本 HEAD^表示上一个版本
//生成一个反向commit,需要解决冲突,从最新HAED开始回到到时第四次提交
git revert HEAD~1

.gitignore文件

.gitignore只能忽略没有被track的文件,如果文件已经被纳入了版本管理器,则修改.gitignore是无效的.需要先把本地暂存区内容情况后再进行add

idea中安装ignore插件

1、再Settings配置中的Plugins中的Markplace输入 ignore后选择 名为 ignore的插件进行install

2、重启idea,再创建的项目中右键项目进行文件 NEW选项选择后,选择.ignore File选项,之后选择属于 git的 .ignore File

3、右击需要进行忽略的文件或者项目目录,选择 Add to .gitignore file将该文件添加到忽略中

4、将文件进行add时 .gitignore file指定类型的文件将不会被add

// 忽略所有的.a文件
*.a
//但不忽略指定文件lib.a
!lib.a
//只忽略当前目录下的TODO文件,而不忽略其他文件中的子文件中的TODO文件目录
/TODO
//忽略任何目录下名为build的文件夹
build/
//忽略doc/notes.text,但不忽略doc/server/arch.txt
doc/*.txt
//忽略doc/目录及其所有子目录下的.pdf文件
doc/**/*.pdf

差异比较

`git diff` 默认直接使用时将比较 `工作区``暂存区`文件的差异

`git diff HEAD` 比较`工作区``本地版本库`的差异

`git diff --cached ` 比较`暂存区``本地版本库`的差异

`git diff commit_id commit_id`比较两个版本直接的差异

`git diff branch_name branch_name`比较两个分支之间的差异


git冲突

`git diff`查看暂存区与工作区文件冲突   

上面<<<表示当前主分支
下面>>>表示需要将内容合并到主分支的内容

1、手动修改冲突
2、将冲突文件添加到暂存区
3、提交冲突文件到本地版本库
4、push到远端

git rebase

git rebase嫁接时从主分支与分支节点共同分支点开始,并且将从该分支点截取对应分支点开始到对应分支的HEAD处直接嫁接到对应分支末尾。如果每个commit_id上有冲突时都要手动解决冲突

形成线性的历史提交记录,直观.但是会改变提交历史,改变了当前分支branch out的节点需要避免在共享分支使用

你可能感兴趣的:(git,elasticsearch,大数据)