本篇文章对git常用的命令做一个总结。
远端仓库:线上代码的落库地方;
本地仓库:远端仓库克隆到本地的地方;
远端仓库本地副本:储存了远程仓库各分支数据在本地的一个副本,用作同步修改记录;
工作区:当前的工作区域,日常开发的环境;
暂存区:执行git add 之后,修改的文本会被临时存到到此;
远程库:执行git commit 的所有记录都在此处;
已修改(modified):文本发生了变更,但还未被标记为暂存(明亮色);
已暂存(staged):对发生变更的文件基于当前分支做个标记,让其加入到下次提交的暂存区中(亮色);
已提交(committed):变更的文件安全的保存到了本地仓库中(亮色消失);
git init // 初始化 在工作路径上创建主分支
git clone 地址 // 克隆远程仓库
git clone -b 分支名 地址 // 克隆分支的代码到本地
git status // 查看状态
git add 文件名 // 将某个文件存入暂存区
git checkout -- file // 撤销工作区的修改 例如git checkout -- readMe.txt 将本次readMe.txt在工作区的修改撤销掉
git add b c //把b和c存入暂存区
git add . // 将所有文件提交到暂存区
git add -p 文件名 // 一个文件分多次提交
git stash -u -k // 提交部分文件内容到仓库 例如本地有3个文件 a b c 只想提交a b到远程仓库 git add a b 然后 git stash -u -k 再然后git commit -m "备注信息" 然后再push push之后 git stash pop 把之前放入堆栈的c拿出来 继续下一波操作
git commit -m "提交的备注信息" // 提交到仓库
若已经有若干文件放入仓库,再次提交可以不用git add和git commit -m "备注信息" 这2步, 直接用
git commit -am "备注信息" // 将内容放至仓库 也可用git commit -a -m "备注信息"
* git commit中的备注信息尽量完善 养成良好提交习惯 例如 git commit -m "变更(范围):变更的内容"
git config --list // 获取config信息
git config --global core.safecrlf false // 去掉git add 命令后 出现的一堆CR LF提示信息
其中CR是回车的意思 LF是换行
git config --global user.name"your name" // 设置username
git config --global user.email"[email protected]" // 设置邮箱
git config --global credential.helper wincred // 存储凭证 (可用于输入一次用户密码后,不再输入 有时我们已经用SSH key 绑定关联好了 但是每次git提交的时候 还是需要你输入用户名密码 在这个时候 敲入这个命令 将凭证存储起来 用户名密码就不需要再次输入了)
git config --global alias.ci commit // 将commit命令设置别名ci git commit命令将由git ci来代替
git diff // 查看变更 工作区与暂存区的差异比对
git diff --cached // 暂存区与提交版本的差异
git diff HEAD // 工作区与仓库中最后一次提交版本的差别
git diff 版本哈希值 版本哈希值 // 查看这2个版本哈希之间的区别
或者 git diff HEAD~数字 HEAD~数字
git diff tt 就是倒数第5个版本与第一个版本之间的差异
git diff --cached tt 暂存区与倒数第5个版本之间的比对
git show HEAD // 查看最后一次提交修改的详细信息 也可以用git show 哈希值 查看对应的内容
git show HEAD^ // 查看倒数第二次的提交修改详细信息
git show HEAD^^ 或者git show HEAD~2 查看前2次变更
git show HEAD 或 git show 哈希值 或者git show tag(标签名) 都可以查看最近一次提交的详细信息
git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
// 获取git log里的树形详细信息 包括hasg 日期 提交信息 提交人等
git log --oneline //拉出所有提交信息 q是退出
git log -5 // 查看前5次的提交记录
git log --oneline -5 // 打印出的日志里面只有哈希值和修改的内容备注
git log 文件名 // 查看该文件的提交
git log --grep // 想过滤看到的内容 过滤日志
git log -n // 查看近期提交的n条信息内容
git log -p // 查看详细提交记录
git commit --amend -m "提交信息" // 回撤上一次提交并与本次工作区一起提交
git reset HEAD~2 --hard // 回撤2步
git reset --files // 从仓库回撤到暂存区
git reset HEAD // 回撤暂存区内容到工作目录
git reset HEAD --soft 回撤提交到暂存区
git reset HEAD --hard // 回撤提交 放弃变更 (慎用)
git reset HEAD^ // 回撤仓库最后一次提交
git reset --soft HEAD^ // 将执行git commit 并没有执行git push到远程仓库的内容 回撤到工作区 并且保存在工作区
git reset --hard HEAD^ // 将执行git commit 并没有执行git push到远程仓库的内容 回撤并且不保存
// 注意 在window电脑端 可能会出现执行git reset --hard HEAD^命令时 提示More? 所以针对windows 我们回撤内容需要键入git reset --hard HEAD^^才可以 如果我们git commit提交2次 想把2次都回撤到工作区保存 可以使用git reset --soft HEAD~2
git reset --hard commitid // 回撤到该次提交id的位置 回撤后本地暂存区可能有内容 本地仓库有要同步的内容 此时 丢弃掉暂存区的内容 并且强制将本地的内容推送至远程仓库 执行下面的命令 git push -u -f origin 分支名 或者git push -u -f这样就可以完全回撤到提交id的位置
git reset --soft commitid // 回撤到该次提交id的位置 并将回撤内容保存在暂存区
git push -f -u origin 分支名 所有内容都回撤完了 将回撤后的操作强制推送到远程分支
git push origin/分支名 --force 强制将本地回撤后的操作 强制推送到远程分支
git tag // 查看列出所有打过的标签名 例如V1.1 V1.11 V1.12 V1.13等
git tag -d 标签名 // 删除对应标签 只是删除了本地的
git push origin :refs/tags/远程标签名 // 删除远程仓库的标签 可以在删除本地标签后 执行这个操作 同步远程
git tag 标签名字 // 在当前仓库打个标签
git tag 标签名 commitid // 给已知提交id的版本打标签 例如git tag v1.1.1 6f8f25fcf57a17e6c72b33f6bca0797fab15ff8b // 给历史提交打V1.1.1的tag标签 这里的commitid可以缩写 缩写成前6位就可以 例如git tag V1.1.1 6f8f25 一样可以给这个提交id打上tag
git tag -l // 过滤tag 例如 git tag -l "V1.1*" // V1.1 V1.11 可以过滤前面是V1.1开头的内容
git show 标签名称 // 查看tag的详细信息 包括commitid 作者信息 日期 内容
git push origin 标签名称 // 同步这个tag到远程服务器 默认tag是打在本地的 这个命令可以把它推到远程
git push origin --tags // 将本地所有tag推送到远程服务器
git pull --tags // 把远程仓库的标签也拉取下来
git tag foo -m "message" // 在当前提交上,打标签foo 并给message信息注释
git tag 标签名 哈希值 -m "message" // 在某个哈希值上打标签并且写上标签的信息
git tag foo HEAD~4 // 在当前提交之前的第4个版本上 打标签foo
git stash // 把暂存区的内容 暂时放在其他中 使暂存区变空
git stash list // 查看stash了哪些存储
git stash pop // 将stash中的内容恢复到当前目录,将缓存堆栈中的对应stash删除
git stash apply // 将stash中的内容恢复到当前目录,不会将缓存堆栈中的对应stash删除
git stash clear // 删除所有缓存的stash
git reset --hard // 回撤git stash pop的内容
git branch 分支名 // 新建分支
git branch // 查看当前所有分支
git checkout 分支名 // 检出分支
git checkout -b 分支名 // 创建并切换分支
git checkout commitId 文件名(文件路径下的文件名) 还原这个文件到对应的commitId的版本
(例如src/page/attendance/attendanceSum.vue我想把它还原到2个版本之前 首先git log src/page/attendance/attendanceSum.vue找到对应想要还原的版本
复制版本提交的commitID 然后执行git checkout commitID src/page/attendance/attendanceSum.vue
这样就把attendanceSum.vue这个单个文件 还原到了对应版本)
git branch -v // 查看分支以及提交hash值和commit信息
git merge 分支名 // 把该分支的内容合并到现有分支上
git cherry-pick commitId // 把其他分支的某一次提交内容合并到当前分支 这个在我们平时多分支开发中很常用
git branch -d 分支名 // 删除分支
git branch -D 分支名 // 强制删除 若没有其他分支合并就删除 d会提示 D不会
git branch -m 旧分支名 新分支名 // 修改分支名
git branch -M 旧分支名 新分支名 // 修改分支名 M强制修改 若与其他分支有冲突也会创建(慎用)
git branch -r // 列出远程分支(远程所有分支名)
git branch -a // 查看远程分支(列出远程分支以及本地分支名 远程分支会以remote/origin/分支名这种形式展示 红色标识)
git branch | xargs git branch \-d //删除当前分支外的所有分支
git branch // 查看本地分支
git reflog show --date=iso // 查看分支创建时间 例如git reflog show --date=iso origin/feature-PCDEC-6375 输出 88e22885 (HEAD -> feature-PCDEC-6375, origin/feature-PCDEC-6375, origin/EC-master, EC-master) refs/remotes/origin/feature-PCDEC-6375@{2021-07-27 11:31:23 +0800}: fetch: storing head 创建时间就是2021-07-27 11:31:23
git fetch // 更新remote索引
git push -u origin 分支名 // 将本地分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push 也可解决 git建立远程分支关联时出现fatal ... upstram的问题
git push origin --delete 分支名 (将git branch -D 分支名 删掉的分支 同步到远程主机 将origin/分支名的该分支也删除掉)
git remote show origin 查看remote地址,远程分支,还有本地分支与之相对应关系等信息(结合git branch -a使用)
git remote prune origin 删除远程仓库不存在的分支 (git branch -a使用)
git reflog show --date=iso 分支名 // 查看指定分支的创建时间 以及更改记录等
// 首先在当前项目主分支先执行git pull 把代码更新为最新
git remote set-url origin <新的仓库名>
git push -u -f origin
git push -u -f origin --all // 把所有分支迁移过去
git push -u -f origin --tags // 把所有tag迁移过去
// 然后去拉取新的仓库代码就可以了 如果新仓库之前拉取过了
重新仓库迁移 里面分支没同步的话 执行 git fetch试一下 同步过来
清除:
git clean -n // 列出打算清除的档案(首先会对工作区的内容进行提示)
git clean -f // 真正的删除
git clean -x -f // 连.gitignore中忽略的档案也删除
git status -sb (sb是 short branch) // 简洁的输出git status中的信息
查看git常用命令:
git helper -a // 查看全部git子命令
git clone
git clone -b targetBranch xxxx.git:将指定的代码仓库克隆到本地;
-b:克隆指定的分支(或者tag也行),如果没有-b,则默认克隆主分支;
git init
从远端直接克隆拉下来的代码,就是一个仓库。但是如果本地是一个全新的环境,想提交到远端上去,就必须执行git init命令,当当前目录初始化为一个git仓库,再继而完成后续操作;
git remote
处理本地仓库和远程仓库之间的关系,操作步骤有很多,这里只是简单介绍,下文详述使用
git remote add xxxx.git:将本地仓库与指定远程仓库关联起来,通常用于新项目的第一次初始化时;
git remote rm xxxx.git:将本地仓库与指定远程仓库断开(用得少);
git remote -v:查看远程仓库的git 地址;
git remote update:对照远程仓库,更新本地仓库(通常用于协作,远程仓库有分支,tag……之内的变更,本地需要更新一下)
使用方法:
git remote set-url命令修改远程仓库地址
git remote set-url传递两个参数
是你要更改的远程仓库的名称。例如,origin或者upstream
是新的远程仓库URL。例如,[email protected]:USERNAME/OTHERREPOSITORY.git
/=============================================================///
例如:从SSH切换到HTTPS的远程URL
1.打开终端
切换到你项目的工作目录
2.列出remotes,是为了得到你想要改变的remote的名字
$ git remote -v
origin [email protected]:xxxxxx/SpringBoot.git (fetch)
origin [email protected]:xxxxxx/SpringBoot.git (push)
3.使用git remote set-url命令从SSH到HTTPS的远程URL
$ git remote set-url origin https://github.com/xxxxxx/SpringBoot.git
4.验证是否改变成功
$ git remote -v
origin https://github.com:xxxxxx/SpringBoot.git (fetch)
origin https://github.com:xxxxxx/SpringBoot.git (push)
git branch
git branch:查看本地分支(会标明当前分支),
git branch -a:查看本地&远程分支(全量的)(会标明当前分支),换成-r表示只查看远程分支;
git checkout
切换&创建分支
git checkout dev_ike:本地分支切换到dev_ike上(前提是此分支存在)
git checkout -b dev_ike:从本地当前分支上,在本地创建一个新的分支dev_ike
git checkout -b dev_ike origin/dev_ike:基于远程分支dev_ike,在本地创建一个新的分支dev_ike
git status
查看当前分支的变更和暂存情况,会列出当前分支名,发生变更的文件,已加入暂存区的文件
git add
文件发生变更之后,在提交之前,需要先把它们加入到暂存区,支持通配符;
git add service.go user.go:把service.go和user.go两个文件加入到暂存区
git add *.go:把所有的.go文件加入到暂存区;
git add .:把当前目录下所有变更的文件都加入到暂存区;
git add -A:把当前仓库内所有变更的文件都加入到暂存区(支持跨目录结构);
git reset
回滚重置,有其他的操作可以替代,这里只介绍一种常用的:
git reset HEAD .:本地分支文件发生了变更,被误操git add到暂存区了,执行这个命令可以把变更文件从暂存区恢复出来
git commit
提交变更到本地仓库,必须在文件加入暂存区之后提交才有效;
git commit -m “重置密码后强制登录”:提交代码,-m表示对这次提交的文本描述,认真编写,方便溯源
养成习惯:永 远都不要使用git commit -am,add 和 commit一定要分开进行
git push
将本地仓库的提交内容推送到远程仓库,这是必要的一步。
git push origin dev_ike:例如:当前分支为dev_ike,现将本地提交项全部推送到远程仓库的dev_ike
适用于所有场合,如果远程没有dev_ike分支,证明dev_ike是本地新建的分支,该操作会将这个新分支和提交项一并推送到远端;如果远程已存在dev_ike,且commit落后本地dev_ike,那么这就是一次正常的push,如果远端dev_ike分支有新的提交(协同开发),就涉及冲突项的解决,下文讲述;
git push-set-upstream origin dev_ike`:或者也可以使用这个,表明与远程分支建立联系,后续直接git push即可
例子:
repo forall -c 'git push aosp HEAD:refs/heads/xxx
具体解释如下:
“aosp”: 这是远程仓库的名称。你需要先在本地仓库中添加该远程仓库,使用命令"git remote add aosp <远程仓库地址>"将远程仓库添加到本地仓库中。
“HEAD”: 表示当前仓库的HEAD分支,即当前所在的分支。
“refs/heads/xxx”: 表示要将当前分支推送到远程仓库中的名为"refs/heads/xxx"的分支中。这里的"refs/heads"表示远程仓库中的heads分支,"xxx"表示具体的分支名称。
总的来说,这个命令将当前本地仓库的HEAD分支推送到名为"aosp"的远程仓库中的"refs/heads/xxx"分支中。
git pull
将远端仓库指定分支领先的提交项,拉取到本地并合并到本地分支;
如果之前推送使用了-set-upstream,表明本地分支与远端分支已有了联系,可以直接git pull;
git pull origin dev_ike:适用于所有场合,即:当前本地分支是dev_ike,拉取远程分支dev_ike最新的代码;
git rm
从本地仓库中删除指定文件&文件夹的git管理,多适用于文件&文件夹已经被纳入git仓库管理,此时再将其添加到.gitignore是无效的,可以使用git rm先将其从git管理中删除,然后再添加到.gitignore中;
git rm *.retry:从本地git管理中删除所有的.retry文件;
git rm -r .idea/:从本地git管理中删除.idea目录;
注意,这个命令不仅仅将文件从git管理中删除了,而且也将文件从磁盘中删除了,所以正确的做法是,先保存副本,然后执行该命令,再将副本拷回来,然后将副本路径添加到.gitignore中。
git fetch
将远端仓库指定分支领先的提交项,拉取到本地。但是并不会合并到本地分支。
理解就是:本地已有了变更,但是还没变更完,想先把远程的更新拉下来,但又不想着急合并,怕影响自己的调试逻辑.
git fetch origin dev_ike:将远端分支的更新拉取到本地,但不着急合并到本地分支;
git merge
将指定分支的代码合并到当前分支。
例如上文,如果使用完git fetch,之后,本地分支的开发也完成,就需要将fetch代码合并到本地分支:
git merge origin/dev_ike:将指定分支的代码,合并到当前分支;
git log
查看提交记录,即commit的记录,会看到提交时间,提交人,提交描述,以及核心的commitId;
git log:查看当前分支的提交记录
git diff
作用与发生变更的文件,主要看前后变更了什么内容。
git diff service.go:看看service.go文件的哪些行发生了变更,编辑器内部的终端会进入查看模式,按q退出,按enter继续下一行;
git reflog
查看当前用户的所有git操作,checkout,pull,push,merge……
git cherry-pick
将指定分支的commit内容,复制到当前分支来,多用于代码提交错了分支,又懒得返工处理;
git cherry-pick release/dev_ike 6461c3b1:将release/dev_ike的commitId为6461c3b1那次提交项,复制到当前分支;
commitId可以多个,空格隔开即可
git tag
标签操作,很多应用在版本迭代过程中,会用标签来管理版本(记住:标签跟分支不要重名)
git tag:查看仓库的标签列表;
git tag tagv1.3.5:基于本地仓库当前的commitId,打上标签tagv1.3.5;
git push origin tagv1.3.5:将标签tagv1.3.5推送到远端仓库;
git tag -d tagv1.3.5:删除本地标签(删除不掉的话,用-D试试);
git push origin --delete tagv1.3.5:删除远端标签;
git tag -l v1.3:筛选标签
参考:
https://blog.csdn.net/qq_38111015/article/details/84885809
https://zhuanlan.zhihu.com/p/559291258?utm_id=0