程序员必备基础:Git 命令全方位学习
Hollis
共 7759字,需浏览 16分钟
·
2020-09-26 14:42
文章目录
Git是什么? Git的相关理论基础 日常开发中,Git的基本常用命令 Git进阶之分支处理 Git进阶之处理冲突 Git进阶之撤销与回退 Git进阶之标签tag Git其他一些经典命令
Git是什么
什么是版本控制?
什么是集中化的版本控制系统?
什么是分布式版本控制系统?
用户在本地就可以查看所有的历史版本信息,但是偶尔要从远程更新一下,因为可能别的用户有文件修改提交到远程哦。 用户即使离线也可以本地提交,push推送到远程服务器才需要联网。 每个用户都保存了历史版本,所以只要有一个用户设备没问题,就可以恢复数据啦~
什么是Git?
Git的相关理论基础
Git的四大工作区域 Git的工作流程 Git文件的四种状态 一张图解释Git的工作原理
Git的四大工作区域
Workspace:你电脑本地看到的文件和目录,在Git的版本控制下,构成了工作区。 Index/Stage:暂存区,一般存放在 .git目录下,即.git/index,它又叫待提交更新区,用于临时存放你未提交的改动。比如,你执行git add,这些改动就添加到这个区域啦。 Repository:本地仓库,你执行git clone 地址,就是把远程仓库克隆到本地仓库。它是一个存放在本地的版本库,其中HEAD指向最新放入仓库的版本。当你执行git commit,文件改动就到本地仓库来了~ Remote:远程仓库,就是类似github,码云等网站所提供的仓库,可以理解为远程数据交换的仓库~
Git的工作流程
从远程仓库拉取文件代码回来; 在工作目录,增删改查文件; 把改动的文件放入暂存区; 将暂存区的文件提交本地仓库; 将本地仓库的文件推送到远程仓库;
Git文件的四种状态
Untracked: 文件还没有加入到git库,还没参与版本控制,即未跟踪状态。这时候的文件,通过git add 状态,可以变为Staged状态 Unmodified:文件已经加入git库, 但是呢,还没修改, 就是说版本库中的文件快照内容与文件夹中还完全一致。Unmodified的文件如果被修改, 就会变为Modified. 如果使用git remove移出版本库, 则成为Untracked文件。 Modified:文件被修改了,就进入modified状态啦,文件这个状态通过stage命令可以进入staged状态 staged:暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodified状态.
一张图解释Git的工作原理
日常开发中,Git的基本常用命令
git clone git checkout -b dev git add git commit git log git diff git status git pull/git fetch git push
git clone
git clone url 克隆远程版本库
git checkout -b dev
git checkout -b dev 创建开发分支dev,并切换到该分支下
git add
git add . 添加当前目录的所有文件到暂存区
git add [dir] 添加指定目录到暂存区,包括子目录
git add [file1] 添加指定文件到暂存区
git add Hello.java 把HelloWorld.java文件添加到暂存区去
git commit
git commit -m [message] 提交暂存区到仓库区,message为说明信息
git commit [file1] -m [message] 提交暂存区的指定文件到本地仓库
git commit --amend -m [message] 使用一次新的commit,替代上一次提交
git commit -m 'helloworld开发'
git status
git status 查看当前工作区暂存区变动
git status -s 查看当前工作区暂存区变动,概要信息
git status --show-stash 查询工作区中是否有stash(暂存的文件)
git log
git log 查看提交历史
git log --oneline 以精简模式显示查看提交历史
git log -p
查看指定文件的提交历史 git blame
一列表方式查看指定文件的提交历史
git diff
git diff 显示暂存区和工作区的差异
git diff filepath filepath路径文件中,工作区与暂存区的比较差异
git diff HEAD filepath 工作区与HEAD ( 当前工作分支)的比较差异
git diff branchName filepath 当前分支的文件与branchName分支的文件的比较差异
git diff commitId filepath 与某一次提交的比较差异
git pull/git fetch
git pull 拉取远程仓库所有分支更新并合并到本地分支。
git pull origin master 将远程master分支合并到当前本地分支
git pull origin master:master 将远程master分支合并到当前本地master分支,冒号后面表示本地分支
git fetch --all 拉取所有远端的最新代码
git fetch origin master 拉取远程最新master分支代码
git push
git push origin master 将本地分支的更新全部推送到远程仓库master分支。
git push origin -d
删除远程branchname分支 git push --tags 推送所有标签
Git进阶之分支处理
git branch git checkout git merge
git branch
git checkout -b dev2 新建一个分支,并且切换到新的分支dev2
git branch dev2 新建一个分支,但是仍停留在原来分支
git branch 查看本地所有的分支
git branch -r 查看所有远程的分支
git branch -a 查看所有远程分支和本地分支
git branch -D <branchname> 删除本地branchname分支
git checkout
git checkout master 切换到master分支
git merge
git merge master 在当前分支上合并master分支过来
git merge --no-ff origin/dev 在当前分支上合并远程分支dev
git merge --abort 终止本次merge,并回到merge前的状态
Git进阶之处理冲突
Git合并分支,冲突出现
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello,捡田螺的小男孩!");
}
}
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello,jay!!");
}
}
Git解决冲突
查看冲突文件内容 确定冲突内容保留哪些部分,修改文件 重新提交,done
1.查看冲突文件内容
2.确定冲突内容保留哪些部分,修改文件
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容, <<<<<<>>>>>> dev是指dev分支上修改的内容
3.修改完冲突文件内容,我们重新提交,冲突done
Git进阶之撤销与回退
git checkout git reset git revert
git checkout
git checkout [file] 丢弃某个文件file
git checkout . 丢弃所有文件
git reset
git reset的理解
git reset的使用
git reset HEAD --file
回退暂存区里的某个文件,回退到当前版本工作区状态
git reset –-soft 目标版本号 可以把版本库上的提交回退到暂存区,修改记录保留
git reset –-mixed 目标版本号 可以把版本库上的提交回退到工作区,修改记录保留
git reset –-hard 可以把版本库上的提交彻底回退,修改的记录全部revert。
git reset HEAD file 取消暂存
git checkout file 撤销修改
git log 获取到想要回退的commit_id
git reset --hard commit_id 想回到过去,回到过去的commit_id
git log
git reset --hard commit_id
git push origin HEAD --force
git revert
git log 得到你需要回退一次提交的commit id
git revert -n
撤销指定的版本,撤销也会作为一次提交进行保存
Git进阶之标签tag
git tag 列出所有tag
git tag [tag] 新建一个tag在当前commit
git tag [tag] [commit] 新建一个tag在指定commit
git tag -d [tag] 删除本地tag
git push origin [tag] 推送tag到远程
git show [tag] 查看tag
git checkout -b [branch] [tag] 新建一个分支,指向某个tag
Git其他一些经典命令
git rebase
D---E test
/
A---B---C---F--- master
D--------E
/ \
A---B---C---F----G--- test, master
A---B---D---E---C‘---F‘--- test, master
git stash
git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash list 显示保存的工作进度列表
git stash pop stash@{num} 恢复工作进度到工作区
git stash show :显示做了哪些改动
git stash drop stash@{num} :删除一条保存的工作进度
git stash clear 删除所有缓存的stash。
git reflog
git blame filepath
git remote
git remote 查看关联的远程仓库的名称
git remote add url 添加一个远程仓库
git remote show [remote] 显示某个远程仓库的信息
参考与感谢
一个小时学会Git(https://www.cnblogs.com/best/p/7474442.html#_label3_4_0_4)
【Git】(1)---工作区、暂存区、版本库、远程仓库(https://www.cnblogs.com/qdhxhz/p/9757390.html)
Git Reset 三种模式(https://www.jianshu.com/p/c2ec5f06cf1a)
Git恢复之前版本的两种方法reset、revert(图文详解)(https://blog.csdn.net/yxlshk/article/details/79944535)
Git撤销&回滚操作(git reset 和 get revert)(https://blog.csdn.net/asoar/article/details/84111841)
为什么要使用git pull --rebase?(https://www.jianshu.com/p/dc367c8dca8e)
有道无术,术可成;有术无道,止于术
欢迎大家关注Java之道公众号
好文章,我在看❤️
评论