Git命令总结


  • git init命令把当前目录变成Git可以管理的仓库,当前目录下多了一个.git的隐藏目录(可用ll -a查看),.git目录不算工作区,而是Git的版本库。
git init
  • 删除本地文件后,想从远程仓库中从新Pull最新版文件。Git提示:up-to-date,但未得到删除的文件.
# 当前本地库处于另一个分支中,需将本分支发Head重置至master.
git checkout master
git reset --hard
# git 强行pull并覆盖本地文件
git fetch --all 
git reset --hard origin/master
git pull

  • 查看git日志
git log 显示从最近到最远的提交日志,需要注意的是将不显示比当前版本更新的版本
git log --pretty=oneline 显示日志的简要信息(仅显示版本号和message)
git reflog 查看命令历史,包含提交和重置的所有信息
//设置git日志格式以及查找JIRA任务:
git config --global alias.lg50 "log -50 --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative"
git lg50 --grep= SIRBYH-8888
  • 版本重置
--Git中,用HEAD表示当前分支的当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100,要把当前版本---回退到上一个版本,就可以使用git reset命令
git reset --hard HEAD^
git reset HEAD~2 【回撤两个版本】
需要重新Commit。
--也可以直接指定目标版本号
git reset --hard 1094a  (目标版本号可以通过git log或者git reflog获取,通常前几位就足够辨识)
git reset命令可以添加参数参数:
1.--soft-将HEAD指针更新为在指定的提交。 工作目录和索引未更改。
git reset --soft HEAD~1* 
2.--mixed -更新HEAD指针,并将索引重置为指定的提交。 工作目录保持不变。 这是reset命令的默认操作模式。
git reset --mixed HEAD~1* 
3.--hard -更新HEAD指针,并将索引和工作目录重置为指定的提交。 使用此选项时要格外小心,因为所有您尚未提交的本地更改都会被覆盖并丢失。
git reset --hard HEAD~1
  • 工作区和暂存区: git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
    Git命令总结
  • 撤销修改
git checkout -- 文件 可以丢弃工作区的修改
如:git checkout -- readme.txt
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区
  • 删除文件
版本库中要删除的文件,用命令git rm删掉,并且git commit
如 git rm readme.txt 
如果是工作区的误删,可以用git checkout -- file 还原到工作区;
如果执行完git commit后就不能用git checkout -- file恢复了(git commit后,暂存区已无数据),得用git reset --hard HEAD^
注意:从未被添加到版本库就被删除的文件,是无法恢复的
  • 添加远程库
本地仓库下运行git remote add origin git@github.com:cike/learngit.git将已有的本地仓库与远程库关联
git push -u origin master 把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程
第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令去掉-u。
git remote -v 查看远程库详细信息,显示内容与权限相关
git checkout -b dev origin/dev   创建并切换到本地分支dev,同时自动和远程origin/dev关联
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>  如:git branch --set-upstream-to=origin/dev dev 单独设置本地dev与远程origin/dev分支的链接
// 查看本地仓库配置
git config --local --list
// 强制推送到远程仓库,且覆盖远程代码库
git push -f --set-upstream origin master:master
//本地master 分支关联远程origin/master 分支
方式一 git branch --set-upstream-to=origin/master master
方式二 git branch -u origin/master master
  • 从远程库克隆
git clone git@github.com:cike/xxx.git
Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议,使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,只开放http端口的条件下就无法使用ssh协议而只能用https
  • 创建和合并分支
git checkout -b dev 创建并切换分支(新增一个名为dev的指针,指向和当前master<当前分支为master>相同的提交,再把HEAD指向dev,就表示当前分支在dev上),相当于 git branch dev 及 git checkout dev 两条命令
git branch 可以查看所有本地分支,当前分支前会有一个*,git branch -a 可以查看所有本地及远程分支分支修改后没有提交是无法切换到另一分支的
git merge dev用于合并指定分支到当前分支,默认采用Fast-forward即“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。合并完成后,就可以放心地删除dev分支了git branch -d dev
合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "merge with no-ff" dev  合并要创建一个新的commit,所以加上-m参数,把commit描述写进去

Git 2.23中新增了git switch -c dev来创建并切换分支,git switch dev来切换到已有分支
  • 解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。
git log --graph --pretty=oneline --abbrev-commit
  • Bug分支
开发中途当前分支不具备提交条件,同事又需要在当前分支或者其他分支上修复bug,此时可以用git stash 暂存现场,以达到一个干净的工作区用以修改或者切换到其他分支
git stash list 可查看所有暂存现场
git stash apply stash@{0} 来指定要恢复的现场,同时可配合git stash drop 对暂存进行删除
git stash pop 恢复的同时把stash内容也删除了
对于同源分支的修改提交,可以用git cherry-pick <commit>来复制一个特定提交到当前分支,复制的同时会做一个新的commit
  • 删除分支
// delete branch locally
git branch -d localBranchName
// delete branch remotely
git push origin --delete remoteBranchName
//如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
  • 变基
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
  • 标签
git tag <name>就可以打一个新标签,默认标签是打在最新提交的commit上
git tag查看所有标签
git tag <name> <commit> 为历史提交打标签
git show <tagname>查看标签信息
git tag -a v0.1 -m "version 0.1 released" 1094adb 带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -d v0.1 删除标签,创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令git push origin <tagname> 或者,一次性推送全部尚未推送到远程的本地标签git push origin --tags
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:git tag -d v0.9 然后,从远程删除。删除命令也是push,但是格式如下:git push origin :refs/tags/v0.9
  • 修改拼写错误的最后提交信息
git commit--amend
该命令将打开您的编辑器,并允许您更改最后一次提交消息
  • 修正拼写错误的分支名
//重命名此分支:将其移动到具有正确名称的新位置。
git branch -m feature-brunch feature-branch
//但如果已推送此分支,则需要从远程删除旧分支并推送新分支:
git push origin --delete feature-brunch
git push origin feature-branch
  • 修改误提交到主分支
将所有更改回滚到新分支:
注意:确保先提交或存储更改,否则一切都将丢失!
git branch feature-branch
git resetHEAD~ --hard
git checkout feature-branch
这将创建一个新分支,然后将主分支回滚到您进行更改之前的位置,然后最终检出您之前所有更改完整的新分支。

原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/274940.html

(0)
上一篇 2022年7月17日
下一篇 2022年7月17日

相关推荐

发表回复

登录后才能评论