【Git】git的学习

本文详细介绍了Git中的关键操作,如配置仓库、文件重命名、版本控制、分支创建与删除、提交信息修改、日志查看、暂存区管理以及协同开发中的冲突处理等,帮助读者掌握Git的基本使用和团队协作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看哪些配置

创建仓库

Add和commit使用和含义

工程重命名

mv README README.md 将文件重命名

git add README.md 添加重新命名的文件到缓存区

git rm README 删除在缓存区的README文件

git reset --hard清理暂存区的文件

因此最便捷的修改文件名的方式为git mv suling.txt su.txt

多种查看日志的方法

git log --oneline查看日志仅显示一行基本信息

git log -n2 --oneline #n2表示2行数据

git checkout -b temp feature-1101 # 创建分支temp,从feature-1101分支copy过来的

git checkout feature-1101 # 切换到feature-1101分支

git branch -d temp # 删除本地分支

git branch -av # 查看所有远端分支和本地分支

commit、tree和blob三个对象之间的关系

git cat-file -p 4cff736a3a97 # 查询指定文件的内容,可以包括但不限于tree,parent,author,committer

git cat-file -t 4cff736a3a97 # 查询指定文件的类型

find .git/objects -type f # 查看当前工程的git当中的提交记录

2棵tree,1个blob

分离头指针

所写的内容一定要与某个分支绑定在一起,不然后续会被git当作垃圾处理掉。

git diff HEAD HEAD^1 #比较Head和Head的父亲HEAD^1之间的差异,HEAD^^1父亲的父亲,也可以使用HEAD~2表示父亲的父亲

删除分支

git branch -d 分支名

git branch -D 分支名 #强制删除内容

修改最新commit的message

git commit --amend

修改老旧的commit的message

git log -3 # 查看最新的3行日志

git rebase -i 要修改的commit的父节点

连续的多个commit被合并

git rebase -i 要修改的commit的父节点

然后将子节点都使用squash进行修改

非连续的多个commit被合并

git rebase -i 要修改的commit的父节点

将间隔的拉到需要合并的父节点下

暂存区与HEAD之间的差异

修改某个文件

git add 修改的文件

git diff --cached

工作区和暂存区所含文件的差异

git diff # 直接比较的就是工作区和暂存区的差异

git diff -- 文件名 #指定文件进行比较

Git中的‘HEAD’是什么?

git 恢复文件到初始状态的命令:

$ git reset HEAD file>

git 展示提交日志命令:

$ git log commit c4f9d71863ab78cfca754c78e9f0f2bf66a2bd77 (HEAD -> master)

在这些命令中常常会看到HEAD这个名词,它指的是什么呢?

回答

这要从git的分支说起,git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。git 是如何知道你当前在哪个分支上工作的呢?

其实答案也很简单,它保存着一个名为 HEAD 的特别指针。在 git 中,它是一个指向你正在工作中的本地分支的指针,可以将 HEAD 想象为当前分支的别名。

HEAD 指向当前所在的分支——master

所以,

  • git reset HEAD  指的是恢复到当前分支中文件的状态。
  • git log 日志展示中HEAD -> master指的是:当前分支指向的是master分支。

工作区恢复到暂存区文件

git checkout -- 文件名 # 将工作区内容恢复到暂存区的内容

git diff --cached # 查看工作区与暂存区的差异

取消暂存区部分文件的修改

git reset HEAD -- 文件名 # 指定文件暂存区取消修改,实际是从版本库重新拉一份到暂存区,再用git checkout -- 文件名 的方式拉取到本地

git reset HEAD # 恢复暂存区所有文件

消除最近的几次提交

git reset --hard 某一次commit # 该次commit之后的提交都会删除

不同提交的指定文件的差异

git diff 分支名1 分支名2 # 查看2个分支的不同

git diff 分支名1 分支名2 -- 文件名 # 查看2个分支中某一个文件的不同

正确删除文件的方法

git rm 文件名称

开发中临时加塞了紧急任务

git stash # 保存当前任务

git stash list # 查看被保存的任务列表

git status # 查看状态即可发现不同

git stash apply # 跳转到被保存的任务

git reset --hard HEAD^ # 消除最近的一次commit(有几个^就撤回几次)

git stash pop # 弹出最近保存的任务,并将保存记录删除

指定不需要Git管理的文件

https://github.com/github/gitignore下有gitignore的示例文件

.gitignore中添加doc,表示doc的文件和doc文件夹下的文件都被忽略,如果doc/是文件夹被忽略

将Git仓库备份到本地?

git clone --bare 原文件夹 目标文件夹或文件 # 不带工作区的克隆?

配置公私钥(这样就不需要用户名的账户密码)

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" #后面一路回车

id_rsa私钥,id_rsa.pub公钥

本地与远端建立链接

远端有仓库,本地连接远端仓库,不适用git clone

git init

git remote add origin https://github.com/417685417/91video.git  #连接远程仓库并将远程仓库取别名为origin

git push origin master #将本地master分支的内容上传到远程仓库

git pull origin master # 从远端拉取内容到本地

git pull 相当于git fetch + merge

git fetch 本地工程名(连接remote时候指定如上就是origin) 远端工程名 # 仅仅是从远端拉去不合并

git merge github/master # 当前分支融合远端github/master仓库

git merge -h #查看使用文件信息

不同人修改不同文件如何处理

git clone https://github.com/417685417/91video.git git_learning # 本地新的仓库名git_learning,可以包含多个人连同一个远端仓库

git config --add --local user.name 'sunmj'

git config --add --local user.email 'sunmj@91360.com'

git config --local -l #查看当前仓库的信息

git checkout -b feature/add_git_commands origin/feature/add_git_commands # 将远端的仓库克隆到本地,然后切换至该分支

修改文件内容,之后提交

git commit 'add message in readme'

git push

git fetch github #这是由于远端的仓库名就叫github,这里注意fetch只是将远端拉去下来,但是在本地没有新建分支或者合并

git merge github/feature/add_git_commands # 将拉去下来的内容合并到当前分支内

其中fetch+merge等于pull的操作。

git checkout -b feature/add_git_commands github/feature/add_git_commands # 本地新建分支然后切换至该分支

git add -u # 当前修改添加到暂存区

git commit -m 'message'

git push

不同人修改了同文件的不同区域

不同人修改了相同文件后,都使用了commit,此时当有人想要push时,会报错,因为出现了2个修改,这2次的commit在远端的gitlab已经获取到,所以此时需要解决方该冲突,一般先

git fetch

git merge

也就是先拉取合并再提交push

不同人修改了同文件的同区域

第一个人修改了某个文件的某个区域,并提交

第二个人修改了相同文件的相同区域,并提交

第二个人想要push他的代码,这时候会报错。

一般这个时候是git merge origin/xxx 来将远端代码和本地合并,这时候会报错,因为修改了同一地方吗,那这时候merge已经把冲突的内容都放到同一个文件里了,这时候就需要人工手动修改冲突文件,两人商量后决定具体冲突的修改。

git status就能看当前分支的状态,并提示你如何操作。

git commit -am'Resolved conflict by hand with 4 git commads'

git push github

同时变更了文件名和文件内容

正常的pull,commit,push就行了,git会自动帮我们做这些修改。

同一文件被不同人修改成不同文件名

提交和push的时候,会保存修改后的2个文件,然后按照提示,删除原始文件,然后git add 新文件名1,git rm 新文件名2,然后git commit -av'xxxxx', git push

禁止向集成分支执行push -f操作

例如恢复早期的一个commit:

git reset --hard xxxx编号

git reset --hard HEAD^ 表示回退到上一个版本

git push -f origin feature/add_git_commands # -f表示强制执行提交操作

结果:导致所有xxxx编号之后的commit都消失了。

禁止向集成分支执行变更历史的操作(也称作变基操作)

同事是基于之前某个commit拉取下来的操作,当你修改commit历史后,主分支的commit就变了,那同事基于的那个commit与当前最新的分支就不一致,会引发麻烦。

怎么快速淘到感兴趣的开源项目

advanced options

搜索条件:git 最好 学习 资料   这种搜索到的内容相关度很小

git 最好 学习 资料 in:readme stars:>1000 filename:gitlab-ci

'after_script:'+'stage:deploy' filename:gitlab-ci

blog easily start in:readme stars:>5000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值