git日常用的命令做个笔记

75 阅读8分钟

日常用的一些git命令;都是一句话式的;方便忘记的时候随时查阅. 用过的git命令都在这了. 本地笔记放了许久的文字;也记不得最初记这些的时候都看了哪些大佬的文章;若有雷同;望见谅

git配置项

说明: --global参数可选,加代表本机所有的git仓库都有效,不加代表别名只在当前仓库有效; 每个仓库的git配置文件都放在.git/config文件中,可以手动修改; 用户的git配置文件放在用户主目录下的一个隐藏文件.gitconfig

配置用户名和邮箱
git config --global user.name username
git config --global user.email userEmail

查看用户名和邮箱
git config user.name
git config user.email

让git显示颜色,git会适当地显示不同的颜色,使输出看起来更醒目
git config --global color.ui true

配置别名
git config --global alias.newName oldName
例: git config --global alias.st status;这样就可以使用"git st"得到和"git status"相同效果

查看已经设置的别名
git config --get-regexp alias.

把当前目录变成git可以管理的仓库
git init

取消当前目录的git管理;git init的逆操作;类似于深度删除.git文件夹
rm -rf .git

远程库相关

关联一个远程库,username是GitHub账户名,reponame是GitHub仓库名;(<git@github.com>:username/reponame.git可以在远程库克隆按钮下直接复制)
git remote add origin git@github.com:username/reponame.git

第一次把本地库推送到远程库
git push -u origin branchName,第一次推送要加-u,会把本地branchName分支和远程branchName分支关联起来,之后的推送就不必再加了.

从远程库克隆一个本地库
git clone git@github.com:username/reponame.git

克隆指定分支
git clone -b branchName <git@github.com>:username/reponame.git

查看远程库信息
git remote
git remote -v也可以查看远程库信息,并且信息更详细,会显示抓取和推送的地址

删除远程库,和上面的git remote add origin ...是相反的操作
git remote rm origin
最常用的代码提交流程
添加文件到暂存区(指定文件)
git add filename
添加文件到暂存区(全部文件)
git add .

提交文件到git库当前分支
git commit -m "本次提交说明,可以是任何内容"

推送到远程库
git push

拉取远程代码
git pull

本地仓库指令

查看仓库当前状态,会告诉我们哪些文件有改动
git status

查看具体修改了哪些内容
git diff

查看(某个文件)工作区和版本库最新版本的区别
git diff HEAD -- fileName

查看提交历史(每一次提交生成一个版本,版本这个词后面会用到)
git log
git log --pretty=oneline,单行查看提交历史;打印内容更简短,看起来更方便

查看分支合并图
git log --graph --pretty=oneline --abbrev-commit

查看命令历史
git reflog

修改版本,HEAD表示当前版本,HEAD^上一个版本,HEAD^^上两个版本,HEAD~100100个版本
git reset --hard HEAD^,返回上一个版本
git reset --hard gitLogId,返回某一个版本,gitLogId表示某一个版本的id(版本号),git log命令的返回信息里有,
    说明: gitLogId可以输入前几位,git会自动找,不过不要太短,防止git找到多个;
    如果在返回老版本后又想回新版本,可以使用git reflog找到gitLogId

撤销修改
git checkout -- filename,撤销工作区的全部修改让工作区回到最后一次git add或者最后一次git commit时的状态;
    说明: 当暂存区有这个文件时,让工作区回到暂存区文件的状态,当暂存区没有这个文件时,让工作区回到版本库文件的状态;

把暂存区的文件放回工作区;
git reset HEAD filename

删除文件
git rm filename
    注: 如果误删文件,只要版本库中有该文件,就可以git checkout -- filename恢复

将多次commit合并成一个
git rebase -i (start,end];前开后闭;start是需要合并的开始哈希值;end是需要合并的结束哈希值
代码量统计
根据用户名统计项目代码修改行数
git log --author="username" --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 }'

根据时间段统计项目代码修改行数
git log --since=2023-11-19 --until=2023-11-26 --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 }'

根据用户名和时间段统计项目代码修改行数
git log --author="username" --since=2022-01-01 --until=2022-12-31 \
--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 }'

分支管理

创建分支并切换
git checkout -b branchName
    注:新版本git提供了git switch -c branchName,作用和git checkout -b branchName相同

创建分支
git branch branchName

切换分支
git checkout branchName
    注:新版本git提供了git switch branchName,作用和git checkout branchName相同

查看分支
git branch

合并指定分支到当前分支
git merge branchName
    说明: git默认使用Fast forward模式,删除分支后,会丢掉分支信息,以后就看不出来曾经做过合并,如果合并时想保留分支信息,可以使用下面的指令;
    git merge --no-ff -m "本次提交说明" branchName;这种方式本质是一个新的commit,以后查看分支合并图(git log)时可以看出来曾经做过合并.

删除分支
git branch -d branchName
    说明: 通常我们是git merge合并后才删除分支,但是假如我们需要丢弃这个分支上的修改,直接删除,这时执行上面指令会报错(注意这种场景非常少见),修改上面指令的-d为-D,就可以强行删除,即git branch -D branchName;

复制其他分支的一个特定的提交到当前分支
git cherry-pick gitLogId

远程库分支管理

推送分支,把该分支上的所有本地提交推送到远程库对应分支上
git push origin branchName

推送分支并建立追踪关系
git push -u origin branchName

创建远程分支到本地
git checkout -b branchName origin/branchName

设置本地分支和远程分支的追踪关系
git branch --set-upstream-to=origin/branchName branchName
或 git branch -u origin/branchName branchName

强制提交,慎用
git push -u origin branchName -f

删除远程库分支
git push origin --delete branchName

查看分支的关联关系
git branch -vv

储藏工作区

储藏当前工作区
git stash

查看已经储藏的工作区
git stash list

恢复本地工作区为某个储藏的工作区并删除对应的储藏记录
git stash pop

恢复工作区但是不删除对应的储藏记录
git stash apply

删除储藏记录
git stash drop

恢复特定储藏,注: git stash可以执行多次,此时git stash list查到的是一个列表
git stash apply stash@{0}

标签管理

说明: 标签默认只存在于本地,不会自动推送到远程库,如果需要,可以手动推送到远程库;

创建标签
git tag tagName
说明: 每一个标签对应一个commit;默认把标签打在最近一次commit上

给历史的某一个特定的commit打标签
git tag tagName gitLogId

创建带有注释说明的标签,(gitLogId选填)
git tag -a tagName -m "说明文字" gitLogId

查看所有标签
git tag

查看标签信息
git show tagName

删除标签
git tag -d tagName

推送一个标签到远程库
git push origin tagName

推送所有标签到远程库
git push origin --tags

删除远程库标签
    本地删除
    git tag -d tagName
    从远程库删除
    git push origin :refs/tags/tagName

忽略特殊文件

1.新建文件 .gitignore

问题: window用户在资源管理器里新建文件时会提示必须输入文件名;

解决方法: 在文本编辑器里"保存"或"另存为"可以把文件保存为 .gitignore

2.编辑 .gitignore

3.把.gitignore添加提交到git库中

查看某个文件在.gitignore中的第几行被忽略了
git check-ignore -v filename

强制添加,即使被忽略了也可以添加成功
git add -f fileName

附录

自定义名词备注

前面的笔记有一些是我自定义的命名;实际使用过程中需要根据实际情况修改 filename:文件名

gitLogId:版本库中某一个版本的id(Git生成的哈希值(SHA))

username:GitHub账户名

userEmail:GitHub邮箱地址

reponame:GitHub仓库名

tagName:标签名

origin:远程库名,git仓库默认名为origin,当然也可以改成别的

branchName:分支名

简写选项说明

前面的笔记很多都用到了这些简写选项;为求精炼没有深究;这里加以说明;其实前面用到这些后缀的每一条命令都可以酌情增减

-u 或 --set-upstream 或 --set-upstream-to=   用于设置本地分支与远程分支之间的追踪关系

-f 或 --force  这个选项用于强制推送(force push)。它会覆盖远程仓库中的现有分支,即使有冲突也会强制更新

-d 或 --delete 或 --prune 删除远程分支或删除远程跟踪引用

-a 或 --all 用于操作所有分支

-m 或 --message 用于指定提交信息

-v 或 --verbose 显示详细的输出信息

-i 或 --interactive 用于进入交互模式