当前位置: 首页 > article >正文

Git 汇总

辅助命令
reset ,clear清屏,把git bash命令窗口中的所有内容清空。
ls -al 查看当前路径下内容
Vi / vim filename 编辑文件

mkdir doc 新建文件夹
echo “hello, world” > readme.txt 在文件夹下新建文件并在该文件中写入内容

第一部分:git 原理

第二部分:git实操

1、git配置
1)查看所有配置(显示当前的git配置)
git config -l (相当于 git config --list)

2)git配置文件分三个级别 system(系统级别)–>global(用户级别)–> local(当前仓库),底层配置会覆盖顶层
git config --system --list
git config --global --list
git config --local --list (注:该命令需要在git repository中执行)

3)编辑Git配置文件
git config -e --system
git config -e --global
git config -e --local (注:该命令需要在git repository中执行)

4)设置提交代码时的用户信息
git config --global user.name ‘your name’
git config --global user.email ‘your email’

5)日志时间格式化
git config --global log.date format:‘%Y-%m-%d %H:%M:%S’

2、git分支
git branch -h 分支帮助
git branch -a 查看所有分支 (remotes/origin/HEAD -> origin/master 表示默认分支)
git branch -a -vv 显示所有分支关联的远程分支
若遇到 git branch -a 无法全部显示远程的分支,可通过 git fetch 将本地远程跟踪分支进行更新即可
git branch -r 查看所有远程分支

git branch -a -vv --fromat=“(committerdate:short) %(refname:short)” 查看所有分支,最后一次提交时间

git branch --format: 格式化输出,用于自定义输出的格式
git branch --format=‘%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))’

git checkout -b test 新建test分支
git push origin test 建立远程分支test
git push -u origin test 创建分支推送到远程
git branch --set-upstream-to=origin/test 将新的test分支与指定的远程test分支建立追踪关系
git branch --set-upstream origin test 将本地分支与远程分支关联
git branch --set-upstream-to=origin/<branch> 

git checkout dev 切换到dev分支

git branch -D test 删除本地test分支

git branch -d <branch_name> # 安全删除,只有当分支已经合并到其它分支时才会删除
git branch -D <branch_name> # 强制删除,不论分支是否合并都会被删除

git push --delete origin test 删除远程test分支

git pull origin dev 从指定的远程分支pull代码

3、git历史
git log 显示当前分支的版本历史
git log -2 --oneline 或者 git log -2 --pretty=“oneline” 简要展示提交记录
git log -5 --reverse 按时间正序输出日志

git log -1 --stat 前n次提交, stat显示每次commit的文件修改统计信息
git log -p – src/main/java/com/imooc/passbook/test.java 显示指定文件相关的每一次diff
git log -1 --name-status name-status显示新增、修改、删除的文件清单

git log --grep=关键词 根据关键词搜索提交历史,例如 git log --grep=测试
git log --author=lisha 查找某一个作者所有提交
git log --pretty=“%h - %s” --since=“2019-01-24” --util=“2019-01-28” --author=lisha

git diff 显示暂存区和工作区的差异
git diff --cached 暂存区与本地版本库的差异
​git diff HEAD 显示工作目录与git仓库之间的差异

git show <git提交版本号> <文件名>查询某个版本某个文件

git log master ^origin/master 查看已经commit但未push的内容

4、下载克隆项目、修改、提交、合并
1)从指定的分支检出项目(从dev分支检出项目)

git clone -b dev git地址

例如:git clone -b dev https://gitee.com/xiaosha_git_oschina/passbook.git


git pull 拉取代码

git checkout src/main/java/cn/fl/project/dto/PrjContCfgDDTO.java 拉取指定文件的代码


git status 显示有变更的文件


git clean -nfd 删除untracked files(连 untracked 的目录也一起删掉, -n 参数先看看会删除掉哪些文件)

git clean -nf 删除untracked files


git add . 添加当前目录的所有文件到暂存区

git add [dir] 添加指定目录的文件到暂存区

git add [file1] [file2] ... 添加指定文件到暂存区


git reset HEAD  src/main/java/com/imooc/passbook/test.java 从暂存区撤销(撤销git add )

git checkout -- src/main/java/com/imooc/passbook/test.java 撤销本地修改



git commit -m 'ls-测试提交' 提交暂存区到仓库区

2)合并代码(注:合并完代码后需要提交)

git merge [branch] 合并指定分支到当前分支
git cherry-pick [commit] 选择一个commit,合并进当前分支,例如:git cherry-pick 0fd96fb76c28e4ede33aac3d21f4cedcdfa6aadb


git cherry-pick --abort 撤销当前的合并操作


     git checkout -p commit提交号
git checkout -p <branch> 文件名
Apply this hunk to index and worktree [y,n,q,a,d,/,e,?]? (是否将补丁加入暂存区, 键入y 加入)

git从其他分支合并某个文件到当前分支(注意文件路径,手写路径或手动定位到具体的文件夹)
直接覆盖合并: git checkout 分支 路径/文件名(全路径,绝对路径)
选择是否合并:git checkout -p 分支 路径/文件名 或 git checkout --patch 分支 路径/文件名

示例:

直接覆盖(从master分支合并进当前分支): git checkout master ReportPrintDto.cs
选择部分更改(从master分支合并进当前分支): git -p master ReportPrintDto.cs

合并代码失败,强制覆盖本地代码

git fetch --all  //只是下载代码到本地,不进行合并操作

git reset --hard origin/master   //把HEAD指向最新下载的版本

git pull


git cherry -v  查看到未push的commit

3)撤销

撤销 git commit

git reset --hard e9f0108bbaf9ff1401b6acd846985284cb4935ad 撤销到指定的commit(适用于未push/已push两种情况)

git reset --hard head 恢复到最后一次提交

git reset --hard head^ 放弃提交,HEAD是指向最新的提交,上一次提交是HEAD^,上上次是HEAD^^,也可以写成HEAD~2 ,依次类推

git reset --hard origin/master 放弃修改,强制覆盖本地代码(适用于未push的情况下)


git reset -- 撤销 git push
git reset HEAD     撤销 git add

4)解决冲突:

git rebase --skip

git rebase --abort

git rebase origin/master 

git pull --rebase 

git push origin master

5)git切换分支时,会将未add或未commit的内容切换过去

问题出现的内容就是因为,我没有add ,而工作区和缓存区内容是公共的,不从属于任何一个分支,所以切换到A分支时,仍然将修改的东西带过去了;

当既想要在切换分支,又不想add时,可以使用git stash,当使用了git stash后,在其他分支仍然可以通过git stash pop找出来

git --help stash

6) 删除git库中untracked files(未监控)的文件

git clean -f    删除 untracked files
git clean -fd  连 untracked 的目录也一起删掉
git clean -xfd   连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)

在用上述 git clean 前,强烈建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd

7) git分支合并忽略配置文件
在项目根目录下新建文件.gitattributes,然后文件中写入需要忽略的文件名 + merge=ours, 一个文件占一行 例: 忽略config.xml 文件 config.xml merge=ours 如果设置了没有起效,在根目录下运行命令行 git config merge.ours.driver true 进行config配置 .gitattributes该文件主要是用于设置git对特定文件进行配置属性的,还可进行其他的配置

8) 修改本地分支名称并推送到远程
修改本地分支名称
git branch -m oldBranchName newBranchName

将本地分支的远程分支删除民
git push --delete origin :oldBranchName

将改名后的本地分支推送到远程,并将本地分支与之关联
git push --set-upstream origin newBranchName

9) 从指定的分支创建分支
git checkout -b 指定的分支

10)把dev分支合并到当前分支
切换到当前分支
git merge dev

11)检出远程分支到本地

git checkout -b 本地分支名字 origin/远程分支名

12)合并特定的提交记录
例如,想要将其它分支某个提交记录合并到master分支上:
首页切换到master分支
git cherry-pick [commit-id] 表示 将另一个分支的指定commit-id合并到当前分支

12)将其它分支的文件合并到当前分支上

git checkout master 切换到当前分支
git merge --no-commit --no-ff 其它分支 – path/to/file.txt
git checkout --patch 其它分支 src/pages/components/modal.tsx

这里选择处理方式:将此块应用于索引和工作树(输入 y ,按回车)

(1/3) Apply this hunk to index and worktree [y,n,q,a,d,j,J,g,/,s,e,?]? y
(2/3) Apply this hunk to index and worktree [y,n,q,a,d,j,J,g,/,s,e,?]? y
(3/3) Apply this hunk to index and worktree [y,n,q,a,d,j,J,g,/,s,e,?]? y

5、git图形化工具
图形化工具:gitk

解决gitk中文乱码,输入以下命令:
git config --global gui.encoding utf-8

查看某个文件的提交记录
gitk 文件全路径
例如:gitk ma-base-web/src/man/java/com/zqsy/zys/mabase/basecontroller/HqAuthController.java

6、git tag
创建tag
git tag -a v1.4 -m ‘my version 1.4’

查看tag
git tag

查看标签信息与对应的提交信息
git show v1.4

删除标签/删除远程仓库中的标签
git tag -d <tagname>
git push origin :refs/tags/v1.4-lw

7、清除git信息
进入项目目录:
清除原项目的git版本信息: rm -rf .git
去掉原仓库git地址: git remote rm
8、git stash暂存
暂存: git stash save “暂存的备注”
暂存记录: git stash list
取回暂存: git stash pop
取回指定的暂存: git stash apply stash@{0} stash@{0}需要先通过git stash list来查看
删除指定的暂存:git stash drop stash@{0}
清空暂存: git stash clear
9、git查看远程地址 与 设置远程地址
git remote -v
如果绑定好远程地址的话:
会有两条地址 fetch 和 push ,那么 fetch 表示我们要获取到的地址,push则表示我们要推送的地址。

添加远程地址:git remote add origin http://git.XXXX.com/XXX/XXX.git/
修改远程地址:git remote set-url origin http://git.XXXX.com/XXX/XXX.git/

第三部分:延伸阅读
1)使用 Git 来获取 Git 的升级:
$ git clone git://git.kernel.org/pub/scm/git/git.git
2)git submodule

git 的 四种对象commit,tree, blob ,tag
在git的世界里, 有四种类型的object, 分别是tree | blob | commit | tag
commit 存储一次提交的信息
tree 代表目录结构
blob 代表具体的某个文件
tag 标签,实际上就是commit的别名

每一次commit对应一个tree,这个tree又记录了整个文档的目录结构,文件的每一次修改又会生成一个blob,blob信息记录在tree下面。

看 .git/objects下面的内容
find .git/object -type f

git cat-file -t commit号 -t看类型
git cat-file -p commit号 -p看内容

第四部分:常见问题
git pull 报错:refusing to merge unrelated histories
git pull origin master --allow-unrelated-histories
在pull命令后紧接着使用–allow-unrelated-history选项来解决问题(该选项可以合并两个独立启动仓库的历史)。


http://www.kler.cn/news/354375.html

相关文章:

  • Java中的异步编程:使用CompletableFuture提升并发性能
  • Latex中表格自动适配页面宽度
  • Redis 数据类型zset(有序集合 Sorted Sets)
  • CMDB平台(基础篇):CMDB的概念以及现状
  • Java SE vs Java EE 与 JVM vs JDK vs JRE
  • JavaScript网页设计案例:打造动态交互的个性化主页
  • 线性代数 矩阵2(方阵)
  • 计算机系统简介
  • 论文 | LARGE LANGUAGE MODELS ARE HUMAN-LEVEL PROMPT ENGINEERS
  • STM32—PWR电源控制
  • 淘宝与天猫商城架构整合实录
  • DevExpress WinForms中文教程:Data Grid - 如何点击获取信息?
  • 李宏毅机器学习2023-HW5-Machine Translation
  • 从源码到平台:使用视频美颜SDK构建高性能直播美颜系统详解
  • Axure重要元件三——中继器修改数据
  • 鸿蒙网络编程系列14-WebSocket客户端通讯示例
  • 排序---java---黑马
  • 从算盘到云计算:计算机发展的壮丽历程
  • C++的内存管理
  • 八、特征降维