git基础操作理解
仔细阅读文字,肯定能使你受益匪浅
git简介
Git 是一个开源的分布式版本控制系统(也是代码托管平台的一种),用于敏捷高效地处理任何或小或大的项目。
git安装(windows)
https://git-scm.com/downloads
安装完后使用电脑的命令提示符工具执行 git --version此命令 出现git版本》下载安装成功
然后桌面右击》菜单会出现git GUI here和git Bash Here
git GUI here 这个就是用界面的形式操作git(都是英文)
git Bash Here 这个是用git自己的命令行工具操作(推荐)
git初次运行前的配置
在 GitHub官方地址 进行注册git账号
首先要配置用户信息,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中
右击》菜单出现 打开Git Bash Here 命令行
配置用户信息 》 执行下面命令全局配置即可
git config --global user.name "John Doe" // github或gitlab 注册的用户名
git config --global user.email [email protected] // 用户名所对应的邮箱地址
检查配置信息
git config --list //列出此git的所有配置信息
git基础
获取 Git 仓库
通常有两种获取 Git 项目仓库的方式:
1.将尚未进行版本控制的本地目录(普通文件夹)转换为 Git 仓库;
2.从其它远程服务器 克隆 一个已存在的 Git 仓库。
两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库(本地仓库)。
-
第一种自己创建本地git仓库(例)
新建一个文件夹my_project(名字可变)
然后在此文件右击》菜单出现 打开git命令行工具git init //用于初始化一个本地的git仓库
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件
注意:如果没有此文件夹可能是重要文件设置隐藏了 -
第二种从远程服务器上克隆git仓库(例)
克隆仓库的命令是 git clone 。 比如,要克隆 Git 的链接库 libgit2,可以用下面的命令:git clone < remote> // remote:是git远程仓库地址 例:git clone https://github.com/libgit2/libgit2
执行此命令后这会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹,打开“libgit2”目录就会出现从远程克隆下来的所有文件。
如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以通过额外的参数指定新的目录名:
git clone https://github.com/libgit2/libgit2 mylibgit //url后面在跟个参数设置本地仓库(目录)名
git本地仓库文件状态
git仓库获取完之后,我们的机器上有了一个 真实项目 的 Git 仓库(本地仓库),并从这个仓库中检出了所有文件的 工作副本。 通常,你会对这些文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库。
git版本管理中,文件有如下四种状态:
1.untracked 2. staged 3. modified 4. unmodified
可使用下面命令查看此目录下所有文件处于什么状态:
git status // 查看文件处于什么状态
-
Untracked状态
字面含义未跟踪。在git中表示此文件在git工作树下, 但并没有加入到git库, 不参与版本控制。(就是此文件还没有归属与git管理对此文件有任何操作)
-
Staged状态
文件处于已跟踪,并处于暂存状态
可以使用下面命令使文件从未跟踪处于已跟踪文件git add <files> // 将此目录下单个文件设置未已跟踪状态,并处于暂存状态 例:git add update.txt git add . // 此目录下所有文件跟踪暂存
-
Modified状态
文件处于已修改, 仅仅是修改, 并没有进行其他的操作(跟踪过后或提交后进行对文件修改就会处于此状态)
注意:一旦修改就不会处于暂存状态了需要再次执行git add < files> 命令 -
Unmodified状态
如果文件没有任何操作并且都已经提交是最新的就会处于当前状态
提交本地仓库
对已暂存的文件必须进行提交到本地仓库才能后续操作(就是将文件的最新修改提交到一个地方供后续操作)
可以使用下面命令将文件提交:
git commit -m 'message' // 对本次修改进行提交,并添加描述
例:git commit -m ‘修改了xxx功能’
注意:每次提交必须携带这次操作的信息,养成良好习惯
远程仓库的使用
远程仓库是指托管在因特网或其他网络中的你的项目的版本库。
你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。
与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。
(就是自己写的项目放到人家的服务器中,对其进行操作,可以多人合作操作)
首先要执行 git clone < remote> 对远程仓库进行克隆,在本地进行操作文件
克隆下来的项目会自动添加好远程仓库默认简写地址名为“origin”,也可自行添加
-
添加远程仓库命令:
git remote add < shortname> <url> // shortname:仓库地址简写 ; url:仓库地址 例:git remote add origin https://github.com/xxx/xxx
-
查看远程仓库命令:
git remote //列出你指定的每一个仓库地址的简写列表 git remote -v //列出远程仓库的简写与其对应的 URL列表
git remote
git remote -v
-
从远程仓库中抓取与拉取命令:
git fetch <remote> //这个命令会访问远程仓库,从中拉取所有你还没有的数据。 例:git fetch origin git pull <remote> <远程分支名>[:<本地分支名> ]//自动拉取远程仓库中你本地还没有的数据 例:git pull origin master
git fetch和git pull的区别?
git fetch 命令从服务器上拉取本地没有的数据时,它并不会修改工作目录中的内容。 它只会获取数据然后让你自己合并。
git pull 在大多数情况下它的含义是执行完 git fetch 紧接着执行 git merge 命令
总结一句话,fetch 和 pull前者是拉取不合并,后者拉取并自动合并到当前本地仓库 -
推送到远程仓库命令:
git push <remote> <branch> //把当前本地修改推送到远程 例:git push origin master
注意:在推送之前必须先拉去最新代码
-
查看某个远程仓库命令:
git remote show <remote> //查看某一个远程仓库的更多信息 例:git remote show origin
-
远程仓库的重命名与移除命令:
git remote rename <oldname> <newname> //修改一个远程仓库的简写名 例:git remote rename origin paul git remote remove <name> //移除一个远程仓库 例:git remote remove paul
注意:一旦你使用这种方式删除了一个远程仓库,那么所有和这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除。
注意:上面的branch是分支的意思在下面会讲到
git打标签
Git 可以给仓库历史中的某一个提交打上标签,以示重要。例如: v1.0 、 v2.0 等等(就是相当于一个标识,一个标识代表一个版本)
-
列出标签命令:
git tag //列出已有的标签
-
创建标签—
Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)。
轻量标签很像一个不会改变的分支——它只是某个特定提交的引用。
附注标签是存储在 Git 数据库中的一个完整对象,拥有打标签者的所有信息。附注标签命令(常用):
git tag -a v1.4 -m "my version 1.4" //在当前所在的地方打个标签名为v1.4,标签信息为my version 1.4 对该标签进行查看详细信息使用git show <tagName> 命令
轻量标签命令:
git tag v1.4-lw //不会保存任何其他信息,只对当前最新提交打个标签
-
后期打标签—
就是对过去的提交打标签
使用git log --pretty=oneline命令可以列出所有提交id,然后根据id进行选择哪一提交打标签git tag -a v1.2 <commitId> 例:git tag -a v1.2 b1d252dad090dc1f64a1788c9b540d133c7369e2
-
删除标签—
git tag -d <tagname> // 删除掉你本地仓库上的标签 git push origin --delete <tagname> //删除掉你远程仓库上的标签
其他相关常用命令
git diff // 查看尚未暂存的文件更新了哪些部分(就是两个文件对比修改了哪些地方)
git commit -a // 自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
git rm <filename> //移除指定文件当下一次提交时,该文件就不再纳入版本管理了
git rm -f <filename> //强制删除指定文件,同上
git log // 会按时间先后顺序列出所有的提交,最近的更新排在最上面
git log -2 //可以指定输出几条
git commit --amend //修改最新提交的提交描述(就是git commit -m 后面的描述如果写错的就可以修改)
git reset HEAD <file> //取消已暂存的某个指定文件
git checkout -- <file> //撤销指定文件当前最新的修改
git分支
分支简介
几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
(就是git默认只有一条线让你操作,如果有多人操作这一条线时,那岂不是乱套了,所以git分支就是来解决这种相关问题,用多条线可以操作同一个git仓库)
当你使用git提供的Git Bash Here命令行工具时 进行git init 初始化仓库时,就会出现名为maser分支,这是git默认分支没有任何其他意义
分支创建
git branch <name> //此命令可以创建一个本地分支名为<name>
例:git branch testing
每一个白色块都是一次提交,在master分支对应的提交上又新建一个分支testing
注意:git branch 该命令不仅可以创建分支,还能有其他的操作,详见其他相关命令
分支切换
git checkout <branchName> // 切换到 <branchName> 分支
例:git checkout testing
此时git内部可以看出黄色块指向了新建的分支testing,
head(指针)可以理解为指向谁就是操作谁
分支合并
git merge <branchName> //将指定分支名<branchName>分支合并到当前分支
例:git merge testing
如果当前分支是master 想把testing分支上的修改合并到当前分支就使用git merge testing ,合并就是将改变后的文件放在一起更好的管理
注意:如果多人共同修改了一个文件内容进行合并时就会产生合并冲突
合并冲突
冲突内容
冲突内容显示就是这样子,不同编辑器显示不一样,大致相似
<<<<<<< HEAD 与 =======之间的是当前分支的修改
======= 与 >>>>>>> testing 之间的是合并过来的分支修改
解决冲突
将两段中间的内容进行处理(该留留,该去去)多余去掉,然后进行git add 暂存,git commit 提交
其他相关常用命令
git branch // 不加任何参数运行它,会得到当前所有本地分支的一个列表
git branch -v // 查看每一个分支的最后一次提交
git branch --merged // 查看已经合并到当前分支的所有分支
git branch --no-merged // 查看已经未合并到当前分支的所有分支
git branch -d <branchName> // 删除指定的本地分支
git branch -vv // 查看本地分支与远程分支关联详细列表
git checkout -b <branchName> // 创建并切换到指定<branchName>分支,相当于一下执行了git branch <name> 和git checkout <name>命令
git ls-remote <remote> // 查看指定仓库的远程分支列表
git remote show <remote>// 查看指定仓库的远程分支详细列表
git fetch <remote> // 拉取远程仓库中本地没有的最新数据
git push <remote> <branch> // 将指定分支推送到远程
git checkout --track remote/branch // 将当前本地分支远程分支进行关联
git branch -u remote/branch // 修改当前分支所关联的远程分支
git push remote --delete branch // 删除远程分支(谨慎)
注意:当你做这么多操作的时候,这些分支全部都存于本地。 当你新建和合并分支的时候,所有这一切都只发生在你本地的 Git 版本库中 —— 没有与服务器发生交互。当你与远程仓库打交道时,比如git clone、git pull、git push,才会与服务器发生交互
到这里就结束了,后续还会更新 git 系列相关,还请持续关注!
感谢阅读,若有错误可以在下方评论区留言哦!!!