Git学习-02
1.常用命令
#通过链接clone代码
git clone xxx
#初始化本地库
git init
#将改动文件加入暂存区
git add .
2.branch 相关
#查看本地所有分支
git branch
#查看所有分支(本地+远程)
git branch -a
#查看远程所有分支
git branch -r
#强制删除本地库develop
git branch -D develop
#删除本地库develop
git branch -d develop
#建立一个新的本地分支dev_3,并切换到 dev_3 分支
git checkout -b dev_3
#将分支dev与当前分支进行合并
git merge origin/dev
#切换到本地dev分支
git checkout dev
#从主分支dev_3创建branch_3分支
git branch branch_3 dev_3
#将branch_3重命名为branch_5
git branch -m branch_3 branch_5
#切换到branch_1.0/master分支
git checkout branch_1.0/master
#切换到上一个分支
git checkout -
#建立追踪关系,在现有分支branch与指定的远程分支remote-branch之间
git branch --set-upstream [branch] [remote-branch]
3.tag 相关
#列出所有tag
git tag
#新建一个tag并且指定commit,tag名称最好和branch名称分开,可以加个-tag
git tag [tag] [commit]
git tag v2.0.2.9_2023-08-17 5ae44897;
#提交所有tag
git push --tags
#新建一个分支,指向某个tag
git checkout -b [branch] [tag]
git checkout -b v2.0.2.9 v2.0.2.9_2023-08-17
#删除本地tag
git tag -d [tag]
git tag -d v2.0.2.9_2023-08-17
#删除远程tag
git push origin :refs/tags/[tagName]
git push origin :refs/tags/v2.0.2.9_2023-08-17
#新建一个tag在 当前 commit
git tag [tag]
#查看tag信息
git show [tag]
#提交指定tag
git push [remote] [tag]
4.stash 使用
#保存当前进度;
#git stash命令的作用主要如果当前分支所做的修改你还不想提交,但又需要切换到其他分支去查看,就可以使用git stash保存当前的修改。
git stash
#看已经保存的历史记录
git stash list
#重新应用最近的
git stash apply
#重新应用某个已经保存的进度,但不删除进度记录
git stash apply stash@{2}
#将文件从临时空间pop下来
git stash pop
#重新应用某个已经保存的进度,并且删除进度记录
git stash pop stash@{2}
#删除某个历史进度
git stash drop stash@{2}
#删除所有的历史进度
git stash clear
5.status 相关
#显示仓库文件状态
git status
#以极简的方式显示文件状态(下面是显示内容解析):git status -s
A:本地新增的文件(服务器上没有)
C:文件的一个新拷贝
D:本地删除的文件(服务器上还在)
M:红色为修改过未被添加进暂存区的,绿色为已经添加进暂存区的
R:文件名被修改
T:文件的类型被修改
U:文件没有被合并(你需要完成合并才能进行提交)
X:未知状态(很可能是遇到git的bug了,你可以向git提交bug report)
?:未被git进行管理,可以使用git add fileName把文件添加进来进行管理
#看你commit的日志
git log
#显示commit历史,以及每次commit发生变更的文件
git log --stat
#搜索提交历史,根据关键词
git log -S [keyword]
#显示过去5次提交
git log -5 --pretty --oneline
#显示某个日期之前的记录,如git log --before=“2020-01-01”(包含2020年1月1号的记录)
git log --before=“yyyy-MM-dd”
#显示某个日期之后的记录,如git log --after=“2020-01-01”(包含2020年1月1号的记录)
git log --after=“yyyy-MM-dd”
#查看某个人的提交记录
git log --author='name'
#显示前n条记录
git log -n
#显示所有提交过的用户,按提交次数排序
git shortlog -sn
#显示指定文件是什么人在什么时间修改过
git blame [file]
#退出查看
按q
#显示当前分支的最近几次提交
git reflog
6.暂存区
#加入到暂存区
git add .
#查看已经被提交的
git ls-files
#从git中删除指定文件
git rm 文件名(包括路径)
#移除文件(只从暂存区中删除)
git rm --cached a.a
#强行移除修改后文件(从暂存区和工作区中删除)
git rm -f 111.sql
#查看尚未提交的更新
git diff --cached
git diff --staged
#恢复暂存区的指定文件到工作区
git checkout [file]
#恢复暂存区的所有文件到工作区
git checkout .
7.commit 相关
#提交并且加注释
git commit -am "init"
#添加commit信息
git commit -m "This is the message describing the commit"
#查看历史commit
git reflog
8.remote 相关
#查看关联的远程地址
git remote -v
#将文件给推到服务器上
git push origin master
#显示远程库origin里的资源
git remote show origin
#切换到远程dev分支
git checkout --track origin/dev
#查看远程库
git remote show
#从服务器上将代码给拉下来
git clone git://github.com/schacon/grit.git
#关联仓库
git remote add origin git@github.com:username/Hello-World.git
#相当于是从远程获取最新版本到本地,不会自动merge
git fetch
#删除远程分支
git push origin --delete [remote-branchname]
#下载远程仓库的所有变动
git fetch [remote]
#显示所有远程仓库
git remote -v
#显示某个远程仓库的信息
git remote show [remote]
#从远端库更新内容到本地
git pull
#取回远程仓库的变化,并与本地分支合并
git pull [remote] [branch]
#上传本地指定分支到远程仓库,如:git push origin master(同步到远程master仓库)
git push [remote] [branch]
#删除远程[branch]分支
git push origin --delete dev
9.reset 相关
#回退到上一个版本
git reset --hard HEAD^
#回退到前3次提交之前
git reset --hard HEAD~3
#回退到指定提交版本
git reset --hard 15c8682d
#强制提交,因为远程已经发生了变化,如何合并就会出现问题
git push -uf origin dev
还有一个比较笨拙但是不会出错的方法,先根据某个提交建立分支,再进行处理
10.对比 differ
#查看尚未暂存的更新
git diff
#显示本地分支和master对比
git diff master
#显示本地与远程feature/v1.8.5.1 对比的不同点
git diff origin/feature/v1.8.5.1
#显示某次提交的元数据和内容变化
git show [commit]
#显示某次提交发生变化的文件
git show --name-only [commit]
#显示某次提交时,某个文件的内容
git show [commit]:[filename]
11.查询关键词
#从当前目录的所有文件中查找文本内容
git grep “陈哈哈”
#在某一版本中搜索文本
git grep “陈哈哈” v2.5
12.squash 使用
Squash 指令通常用于将一系列相关的提交合并成一个单独的提交,以便更好地组织提交历史。例如,当你在开发一个新功能时,可能会提交多个小的修改,这些修改都是为了实现同一个目标。在将这些修改合并到主分支之前,可以使用 Squash 指令将它们合并成一个新的提交,以便更好地描述这个新功能的实现过程。
使用 Squash 指令的步骤如下:
-
在分支上进行一系列提交。
-
切换到需要合并这些提交的分支上。
-
运行 git rebase -i ,其中是需要合并的提交序列中的最早的提交。
-
在编辑器中打开交互式 rebase 的 TODO 文件。
-
将需要合并的提交行的前面的 pick 替换为 squash。
-
保存并关闭编辑器。
-
在编辑器中打开提交信息文件,编辑新的提交信息。
-
保存并关闭编辑器。
-
运行 git rebase --continue。
-
如果出现冲突,解决冲突并运行 git add 命令,然后运行 git rebase --continue。
-
当 rebase 完成后,使用 git log 命令查看提交历史,确认新的提交已经添加到提交序列中。
需要注意的是,使用 Squash 指令合并提交时,会对提交历史进行修改。因此,在合并提交之前,最好先备份当前分支的提交历史,以便在需要时可以恢复到之前的状态。
git merge 和 git merge – –squash 的区别:
squash 是将其他分支内容合并和重新进行一次提交封装。这样方便我们对主分支的管理。dev 分支开发可能会随心所欲的进行提交已经对提交日志的细小记录。但是对于主分支根本不关心这些或者需要进行一些提交信息的规则定义。这时候我们可以 squash 先合并内容然后在重新一次性提交
-
git merge:直接将其他的提交记录合并进来。
-
git merge – –squash:是提交内容的合并。
-
squash 可以合并提交备注
如何将5次合并为1次?
主要命令
#查看提交日志
git log
#找到要合并的最先提交的id
git rebase -i f83d9306
#继续编辑
git rebase --edit-todo
#编辑合并日志
git rebase --continue
#跳过
git rebase --skip
#推送
git push -f
#查看提交日志
git log
可以看到最新的在最下面,最上面的要选为 pick,下面的为 s,表示合并
13.cherry-pick
作用:把指定提交合并到指定分支
需求:把 dev 分支的 commit2 提交合并到 master 分支
实现:
git checkout master
git cherry-pick commit2
14.git gc
git gc
是 Git 中的 “垃圾回收”(Garbage Collection)命令,它的作用是优化存储库的对象数据库,以减小存储库的物理大小并提高性能。Git 存储库中的对象数据库包含所有的提交、分支、标签、树对象和 blob 对象等,随着时间的推移,这些对象会不断增加,有些可能会变得不再需要,但仍然占用磁盘空间。
git gc
主要执行以下操作:
-
垃圾收集: Git 通过寻找不再被引用的对象,将它们标记为垃圾,然后删除这些未引用的对象。这有助于释放磁盘空间。
-
压缩文件: Git 将一些小的对象文件合并成更大的文件,从而减小了文件数量,提高了性能。
-
重建索引: Git 会重建索引以提高查询性能。
-
清理和优化存储库: 删除一些没有用的引用,清理不再需要的临时文件,以及优化存储库的内部结构。
通常情况下,git gc
不需要手动运行,Git 会自动进行垃圾回收。但在某些情况下,手动运行 git gc
可能有助于改善存储库的性能,尤其是当存储库变得非常大或者需要紧急恢复磁盘空间时。要手动运行 git gc
,只需在存储库目录中运行以下命令:
git gc
注意,git gc
可能会花费一些时间,具体时间取决于存储库的大小和需要清理的对象数量。不过,它通常是一个安全的操作,不会导致数据丢失,但仍建议在执行前进行备份。
15.git 统计提交信息
1.统计个人
git log --author="327782001@qq.com" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -
2.统计所有人
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
3.统计某一段时间
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --since='2017-01-01' --until='2022-03-05' --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
4.统计整个项目
git log --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -
5.统计用户提交次数
自 2017-01-01 号以来的提交次数:
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --no-merges --since='2017-01-01' | grep -e 'commit [a-zA-Z0-9]*' | wc -l;done
- 点赞
- 收藏
- 关注作者
评论(0)