Git命令_详解

概念

Git基于树维护的,每一个节点都是历史版本,可以进行代码管理。

image.png

常用命令

初始化文件

│  config 配置信息
│  description 仓库信息
│  HEAD   指向的分支ref: refs/heads/master[user] 指定是哪个分支,默认是master分支
│
├─hooks
│      applypatch-msg.sample
│      commit-msg.sample
│      fsmonitor-watchman.sample
│      post-update.sample
│      pre-applypatch.sample
│      pre-commit.sample
│      pre-merge-commit.sample
│      pre-push.sample
│      pre-rebase.sample
│      pre-receive.sample
│      prepare-commit-msg.sample
│      push-to-checkout.sample
│      sendemail-validate.sample
│      update.sample
│
├─info
│      exclude
│
---其中add生成的文件是文件信息,commit生成的文件是指针
├─objects(add和commit都生成文件信息,xx两位十六进制文件夹,38位文件名)
│  ├─info
│  └─pack
└─refs
---- git pull指令会生成
    ├─heads  [master,user] 本地分支
    └─tags								 标签分支
    |--remotes						 远程分支
-----commit文件后会生成日志文件
---log文件夹(refs文件夹和head文件)
   [
     refs/heads/ [master,user]  指向最新的消息
     head(记录信息)
   ]
---commit_editmsg 最新的提交信息
---index
---fetch_head  git fetch 产生的
---Ogin_head   git git reset --hard 产生的 

image.png

//一般在githup,gitee提交人显示该信息,必须设置,假的也行,最好真实,可以进行联系。
git config [--global] user.name xxx   设置全局用户名:信息在~/gitconfig文件中
git config [--global] user.email xxx@xxx.com 设置全局邮箱,信息记录在~/.gitconfig文件中
git init 将当前目录配置成git仓库,信息记录在.git文件夹中
git status 显示有变更的文件
git add . 将当前工作区所有的文件的修改信息加入暂存区
git log 查看当前分支的所有版本
git remote add origin(可修改,别名) git@github.com:xxx/xx.git 将本地仓库关联到远程仓库
git clone git@github.com:xxx/xxx.git 将远程仓库xxx下载到当前目录
git branch --set-upstream-to = origin/branch_name1 branch_name2 将远程的branch_name1 和 本地的branch_name2分支对应
git push -u(第一次需要) origin <本地分支名 refs/head/master>:<远程分支名> 将当前分支推送到远程仓库
git pull origin master将远程仓库的当前分支与本地仓库的当前分支合并

配置

Git的设置文件为.gitconfig 它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中

git config --list : 显示当前的Git配置

git config -e [--global] : 编辑Git配置文件

git config [--global] user.name xxx:设置全局用户名,信息记录在~/.gitconfig文件中

git config [--global] user.email xxx@xxx.com:设置全局邮箱地址,信息记录在~/.gitconfig文件中

git config --global init.defaultBranch <defaultBranch>:配置初始默认的分支名

进阶命令(恢复与删除)

git rm --cache [file1] [file2] ... : 删除暂存区的文件,文件未跟踪,返回到工作区

git diff XX:查看XX文件相对于暂存区修改了哪些内容

git log 查看详细信息,可以看到作者信息

git relog 查看版本信息

---恢复!!!没有git add/commit提交删除信息,可以从暂存区恢复到工作区
git restore XXX(当前)

---恢复(切换版本)!!!已经用git add/commit提交删除信息
git checkout 版本号 相当于开辟了一个虚拟分支 head直接发生改变  master不会发生改变 head ->xxxxxx
git reset --hard + 版本号  穿越到指定版本号(保留了之前的信息)
head不发生改变,master发现改变,产生ORIG_HEAD文件
git revert xxx(之前一个版本号,不经常使用)

image.png
https://blog.csdn.net/longintchar/article/details/82314102

远程

image.png

git fetch origin master //从远程主机的master分支拉取最新内容 
git merge FETCH_HEAD    //将拉取下来的最新内容合并到当前所在的分支中
git pull origin branch_name //git fetch 和 git merge 结合

git pull 详解

?如果远程和本地的分支合并是发生冲突时,怎么解决的,原则是什么?

  1. 默认情况

在默认情况下,如果本地代码和远程代码没有冲突,那么git pull会成功执行代码合并,不会覆盖本地修改。

git pull
  1. 远程代码冲突

如果远程仓库中的代码和本地代码发生冲突,那么git pull会尝试自动合并区别,但是不保证一定成功。
如果自动合并失败,git pull会提示你手动解决冲突,然后再提交更改。

git pull

Auto-merging file1.txt
CONFLICT (content): Merge conflict in file1.txt
Automatic merge failed; fix conflicts and then commit the result.
  1. 本地代码冲突

如果你在本地修改了代码,但是没有提交,那么git pull会覆盖你的本地修改。
这种情况下,git pull会提示你存在本地冲突,让你先提交本地修改或者stash本地修改,然后再执行代码合并。

git pull
error: Your local changes to file1.txt would be overwritten by merge. 
Aborting.
Please commit your changes or stash them before you merge.
  1. 如何避免呢?
  • 推荐的方式是提交本地修改后再进行代码合并。
git add .
git commit -m "my local changes"
git pull
  • 禁止自动合并
git pull --no-merge
  • Stash本地修改(不常用,基本不适用)
git stash save "my local changes"
git pull
git stash pop
  1. 总结
  • git pull会覆盖本地修改的代码,但是只有在本地代码和远程代码发生冲突的情况下。
  • 为了避免本地修改被覆盖,我们可以提交本地修改、stash本地修改或者禁止自动合并。

分支

常用分支大厂的Git代码管理规范是怎样的?
!1694856228361.jpg```git
git branch xxx

git branch -v: 查看本地分支

git branch -r : 列出所有远程分支

git branch -a : 列出所有本地分支和远程分支

删除分支
git branch -d branch_name:删除本地的branch_name分支

git push origin --delete [branch-name] : 删除远程分支

切换分支
git checkout branch_name:切换到branch_name这个分支

git checkout -b branch_name:创建并切换到branch_name这个分支

合并分支(当前分支)
git merge xxx(要合并的分支)
如果冲突,需要add/commit

## 标签
对每个提交的记录打上标签
```git
git tag -a v0.9 xxx  -m "release 0.1.0 version"//给某个打上标签
git tag -a v1.0 -m "release 0.1.0 version" //给最新的打上标签
git tag -d xxx //删除标签
git push origin --tags //推送标签
-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。 

文件管理

  1. git add 1.txt 会生成一个文件夹包含文件信息。
  2. git commit 会生成一个版本号,如下图

image.png

新增操作
git cat-file -p a5d24c8f38ec41f9776fc5f6260804bd3991c662(commit的版本号)
---生成内容
tree 9aff8923eb9062c759abc11585add04207e045a6(新生成的)
author pursuing <2544576292@qq.com> 1694857981 +0800
committer pursuing <2544576292@qq.com> 1694857981 +0800
-------------------
git cat-file -p 9aff8923eb9062c759abc11585add04207e045a6
---生成内容
100644 blob ca1584de0f33e8cbadbe6a9ef90ffe5aa6d5e618(第一次 git add)    1.txt

修改删错
git cat-file -p  f8b1c10
tree c0280daa239faf6db9fdaf104f85ace771d04465
parent a5d24c8f38ec41f9776fc5f6260804bd3991c662(在新增操作下进行)
---------------
git cat-file -p   c0280daa239faf6db9fdaf104f85ace771d04465

---生成内容
100644 blob 6398f449f481b885de67e6607c504fcb53437d5b(第二次 git add)    1.txt

新增另一个文件夹操作

$ git cat-file -p 40cd9a9
tree 6bf2509ea9590ec9984d695715efcd12b709da19
parent f8b1c10d2f870acc29ed0025640380b9f14119aa(是删除指令)
--------------
$ git cat-file -p   6bf2509ea9590ec9984d695715efcd12b709da19
---生成内容
100644 blob 6398f449f481b885de67e6607c504fcb53437d5b    1.txt
100644 blob d340ec3ddcef9b907ede02f64b5d3f694da5d081    2.txt(变成了两个)


分支管理

image.png
git add 将文件加入暂存区 是因为此时没有指针指向该文件,而commit之后有了指针指向文件。。
image.png

git子模块

嵌套使用git会有以下问题
image.png
https://zhuanlan.zhihu.com/p/404615843

.gitignore

  • 在 Git 仓库中,.gitignore 文件用于指定要忽略的文件或目录,这些文件或目录不会被 Git 跟踪或上传到代码仓库中。通过在 .gitignore 文件中添加模式或规则,可以告诉 Git 哪些文件应该被忽略。
# Compiled class file
*.class

# Eclipse
.project
.classpath
.settings/

# Intellij
*.ipr
*.iml
*.iws
.idea/

# Maven
target/

# Gradle
build
.gradle

# Log file
*.log
log/

# out
**/out/

# Mac
.DS_Store

# others
*.jar
*.war
*.zip
*.tar
*.tar.gz
*.pid
*.orig
temp/

gitignore嵌套使用

:::info
Git 在处理 .gitignore 文件时遵循一定的规则。当 Git 遇到一个 .gitignore 文件时,它会在当前目录和子目录中查找要忽略的文件,然后将这些文件加入到忽略列表中。这意味着如果在某个子目录中有一个 .gitignore 文件,Git 会遍历该文件,将其中指定的文件或目录加入到忽略列表中。
:::

:::info
然而,并不是所有开发者都希望 Git 忽略嵌套的 .gitignore 文件。有时候,嵌套的 .gitignore 文件可能会引入一些意外的行为,导致 Git 忽略了某些应该被跟踪或上传的文件。在这种情况下,我们需要找到一种方法来让 Git 忽略嵌套的 .gitignore 文件。
:::


解决方法

  1. 使用通配符规则
    :::info
    在 .gitignore 文件中使用适当的通配符规则可以解决嵌套 .gitignore 文件的问题。通配符规则可以帮助我们指定要忽略的文件或目录,而不需要使用嵌套的 .gitignore 文件。
    例如,假设我们有一个包含子目录的项目结构,我们希望忽略所有子目录中的 .gitignore 文件。我们可以在项目根目录的 .gitignore 文件中添加以下规则
    :::
**/.gitignore

这个规则会让 Git 忽略所有嵌套的 .gitignore 文件,并将子目录中的其他文件正常地加入版本控制。

  1. 使用命令行工具
    :::info
    除了在 .gitignore 文件中添加规则外,我们还可以使用一些命令行工具来处理嵌套的 .gitignore 文件。
    比如,我们可以使用 git check-ignore 命令来检查 Git 是否会忽略某个文件。通过指定 -v 选项,我们可以查看 Git 忽略文件的详细信息,包括忽略规则的来源。这样,我们就可以确定是否有嵌套的 .gitignore 文件影响了 Git 的忽略行为。
    :::

ieda

  • 使用的cheout分支管理版本,黄色是head指针,绿色是master指针,master始终不动,动的是head指正

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值