IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Git常用命令(超详细) -> 正文阅读

[开发工具]Git常用命令(超详细)

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

一、基本操作

命令说明
git init初始化一个版本库
git add提交到暂存区,例如git add readme.txt
git commit提交到本地仓库,例如 git commit -m “wrote a readme file”
git status查看当前状态
git status - s查看当前状态的精简信息
git diff查看工作区与暂存区的文件差别,例如git diff readme.txt
git diff HEAD查看工作区与本地仓库的文件差别
git diff --cached / git diff --staged查看暂存区与本地仓库的文件差别
git log查看提交日志,展示commit id、提交时间以及提交message等
git log --graph --pretty=oneline --abbrev-commit–graph以图形化形式展示,可以方便查看分支的合并情况;–pretty=oneline 简化日志内容;–abbrev-commit 简化commit id
git rm <file>将文件从工作区和暂存区中删除
git rm --cahched <file>将文件从暂存区中删除

二、版本回退

命令说明
git reset版本回退,将本地仓库回退到之前的版本,并使暂存区与本地仓库保持一致,工作区内容不变。例如git reset --hard HEAD^,HEAD^表示上一个版本,HEAD^^表示上上个版本,HEAD~100表示上100个版本
git revert反向修改
git reflog可以查到HEAD的所有变化记录,HEAD指向当前版本(当前的commit id)
git checkout – <file>或
git restore – worktree
丢弃工作区的修改,撤回到最近一次add或commit的状态,例:git checkout – readme.txt,或者git restore readme.txt(–worktree是默认参数)
git reset HEAD <file>或
git restore --staged
丢弃暂存区的修改,与本地仓库保持一致
git restore --source=HEAD --staged --worktree <file>同时丢弃工作区和暂存区的修改,与本地仓库保持一致

reset与revert的区别在于:

reset:A->B->C,从C退到B,A->B,C版本丢失(当然也有办法找回)

revert:A->B->C,从C反向修改到B,A->B->C->B,C还在


用git reset从C退到B,再用git log,发现日志少了一个,此时如果想穿越到C,只要记得C的commit id,使用git reset,把后面的HEAD替换成commit id即可,如果不记得,可以使用git reflog命令,找到你要穿越到的commit id。

三、远程仓库

命令说明
git remote add origin <url>添加远程仓库,origin是远程仓库的标识,可以随便起
git remote -v查看远程仓库信息,-v查看详细信息
git remote rm origin解除本地和远程仓库origin的关联
git clone克隆远程仓库
git pull <远程主机> <远程分支>:<本地分支>将远程分支合并到本地分支,发生冲突的解决方法与分支管理的解决冲突一样
git push <远程主机> <本地分支>:<远程分支>把本地分支的所有提交推送到远程分支并合并,远程分支和本地分支名相同时可简写,例:git push origin master

image-20220717120414286

四、分支管理

命令说明
git branch列出所有分支,并在当前分支前标一个 ? * ?
git branch <branch>创建分支
git checkout <branch>
或 git switch <branch>
切换分支
git checkout -b <branch>
或 git switch -c <branch>
创建新分支并切换到该分支
git branch -d <branch>删除分支
git branch -D <branch>强行删除一个没有合并过的分支
git merge <branch>将指定分支合并到当前分支中,<branch>为可选参数,默认为所有分支
git merge --no-ff -m <message> <branch>合并时强制禁止Fast forward模式
git switch -c dev origin/dev从远程origin/dev分支创建本地分支dev并切换到该分支
git branch --set-upstream-to=origin/dev dev指定本地dev分支与远程origin/dev分支的链接
git push origin --delete 分支名删除远程分支

4.1 简单的现象

发现个现象:在testing分支修改了同一个文件,在切换回master之前,如果没有add commit,在master分支能看到testing分支的修改,但是如果add commit了的话,看不到。

14-edf19389df5e3952ddff4fd01de6ecab--e3ca--image-20220714223358971.png

4.2 合并冲突

当发生合并冲突,需要手动修改,然后add+commit,如果没有冲突,则不需要add+commit。

合并冲突的可能情况如下,其中master和dev合并时发生冲突,需要手动修改,然后提交,E是一个新的提交点:

image-20220716183136937

未发生合并冲突的可能情况如下:

image-20220716183534358

4.3 强制禁止Fast forward模式

在合并分支时,如果没有发生冲突,Git会采用Fast forward模式(参考上图),这样在log中看不出来曾经做过合并,如果强制禁用Fast forward模式,就会在merge时生成一个新的commit,这样,在分支历史上就可以看到合并信息。

image-20220716185545506

image-20220716185928860

五、临时存储

命令说明
git stash临时存储当前分支的工作现场
git stash list列出所有临时存储的工作现场
git stash apply <stash>恢复工作现场,但是不删除stash内容
git stash drop删除stash内容
git stash pop恢复工作现场,并删除stash内容

应用场景:你正在dev上面开发,但是突然发现master上面有个bug,你当前工作只进行到一半,还不能提交,你用git stash临时存储dev的工作现场,切换到master,然后创建个新分支issue-101用于改bug,改完bug提交,然后合并到master上,删除issue-101分支,ok,你切换到dev打算继续干活,用git stash pop恢复了现场。

但是,你想了想,dev分支上好像也有这个bug,你用git cherry-pick <commit>把之前改bug所做的commit复制过来,相当于在dev上做了一次一摸一样的提交(提交内容相同,但id不同),这样dev上也改好了这个bug,不用重复操作了。

六、标签管理

命令说明
git tag查看所有标签
git tag <tag> <commit id>创建一个新标签,默认对当前分支的最新commit打标签,若给定commit id,则在指定commit上打标签
git tag -a <tag> -m <message> <commit id>创建带有说明的标签,-a指定标签名,-m指定说明文字
git show <tag>查看标签信息
git push origin <tag>将指定标签推送到远程仓库
git push origin --tags将所有标签推送到远程仓库
git tag -d <tag>删除本地仓库的标签
git push origin -d tag <tag>删除远程仓库的标签

参考资料:

Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)

Git 教程 | 菜鸟教程 (runoob.com)

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:07:01  更:2022-07-20 19:07:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 18:49:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码