首页 > 其他分享 >Git 基本操作

Git 基本操作

时间:2024-09-26 15:49:31浏览次数:3  
标签:文件 Git 提交 git branch 基本操作 分支

目录


一、基本概念

Git 是一种分布式版本控制系统,用于跟踪和管理代码的变更。它最初是由 Linus Torvalds 开发的,用于管理 Linux 内核的源代码。

Git 在软件开发中被广泛应用,尤其是在团队协作和开源项目中。通过使用 Git,开发人员可以更好地管理代码、协同工作、追踪问题和版本发布等。

1、工作区域

Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库。

你的本地仓库由 Git 维护的三棵"树"组成。

  • 工作目录:它持有实际文件;
  • 暂存区(Index):它像个缓存区域,临时保存你的改动;
  • 本地仓库(Respository):可以把本地仓库理解成一个目录,这个目录中所有的文件都可以被Git管理起来每个文件的删除、修改、新增操作都可以被 Git 跟踪到以便任何时候,都可以追踪历史或者还原到之前的某一个版本

2、文件状态

对于任何一个文件,在 Git 内都只有三种状态:已修改(modified)已暂存(staged)已提交(committed)

  • 已修改表示修改了某个文件,但还没有提交保存;
  • 已暂存表示把已修改的文件放在下次提交时要保存的清单中;add
  • 已提交表示该文件已经被安全地保存在本地数据库中了。commit

二、基本使用

1、设置用户标识

当你安装 Git 后首先要做的事情是设置你的用户名称和 e-mail 地址。这是非常重要的,因为每次 Git 提交都会使用该信息。它被永远的嵌入到了你的提交中:

git config --global user.name "xxx"    # 名称
git config --global user.email xx@xx   # 邮箱

只需要做一次这个设置,如果你传递了 --global 选项,Git 将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或 e-mail 地址,你可以在该项目中运行该命令而不要 --global 选项。总之 --global 为全局配置,不加为某个项目的特定配置。

2、初始化仓库

git init

该命令执行完后会在当前目录生成一个 .git 目录。

3、提交文件到暂存区

现在在新建一个文件:

通过命令 git status 可以查看当前文件状态,显示有一个未跟踪的文件 h.txt。

下面就可以尝试把文件提交到暂存区,使用 git add 命令:

git add [files1] [files2] # 添加指定文件到暂存区
git add [dir]             # 添加指定目录到暂存区
git add .				  # 添加当前目录下的所有文件到暂存区
git add -p		  		  # 同一文件的多处变化,实现分次提交

4、提交到本地库

git commit -m [message] (文件名)  # 提交缓存区内容到本地库
git commit [file1] -m [msg]		 # 指定已追踪的文件进行提交
git commit -a -m [msg]			 # 相当于add和commit组合提交,直接到仓库
git commit -v					 # 提交时显示diff信息
git commit --amend -m [msg]		 # 使用一次新的commit,来代替上一次提交
git commit --amend [file1]		 # 指定文件重新上一次commit

到目前为止,已经把改动提交到 HEAD 了,但是还没有到远程仓库。

可以使用 git log 查看所有的提交:

5、推送到远程仓库

执行如下命令以将这些改动提交到远端仓库

git push origin master

可以把 master 换成你想要推送的任何分支。

如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:

git remote add origin <server>

如此你就能够将你的改动推送到所添加的服务器上去了。

git remote

git remote -v					 # 查看当前别名
git remote add 别名 链接          # 创建别名

git remote rm 库名                # 删除库
git remote remove 别名            # 删除别名

5.1 错误说明

如果你的远程仓库已经是创建好的,并且要提交的分支上有内容的话(push 时会提示远程库与本地库不一致造成的错误,如下图),要先 pull 到本地,再重新 push


先执行如下命令:(master 换成你要拉取的分支)

git pull --rebase origin master

然后再重新 push 就正常了。

6、克隆

通过 git clone 命令可以克隆远程仓库到本地:

# 克隆一个项目和它的整个代码历史(版本信息)
$ git clone [url]

# 指定克隆分支
$ git clone -b 分支名 [url]

三、分支操作

分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是"默认的"分支。在其他分支上进行开发,完成后再将它们合并到主分支上。

下面是 Git 中分支操作的常用指令:

# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 新建一个分支,但依然停留在当前分支
git branch [branch-name]

# 新建一个分支,并切换到该分支
git checkout -b [branch]

# 切换分支
git checkout [branch-name]

# 合并指定分支到当前分支
$ git merge [branch]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

1、查看分支

git branch

此例的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支(前面有 *)。执行 git init 的时候,默认情况下 Git 就会为你创建 master 分支。分支在本地完成,速度快。

2、创建分支

git branch [branch-name]

3、切换分支

通过如下命令可以切换分支:

# 切换分支
git checkout [branch-name]

下面的指令更便捷,可以同时实现刚才提到的两个功能:

# 新建一个分支,并切换到该分支
git checkout -b [branch]

4、合并分支

现在在 test1 分支上修改文件 h.txt,然后 commit:

然后切换回主分支合并:

对其他分支的更改不会反映在主分支上。如果想将更改提交到主分支,则需切换回 master 分支,然后使用合并。

5、删除分支

使用 -d 标识,把新建的分支删掉:

git branch -d test

6、上传分支

除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的:

git push origin <branch>

四、替换本地改动

假如操作失误可以使用如下命令替换掉本地改动:

git checkout -- <filename>

此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。

步骤见下图:


先修改了 h.txt,然后执行 git checkout h.txt,然后所有改动都被删除了。

假如你想丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地主分支指向它:

git fetch origin
git reset --hard origin/master

五、重置

当我们不想要之前提交的修改时,就会用到这个命令。也许这是一个 错误的提交或者可能是引入了 bug 的提交,这时候就要执行 git reset

git reset 能让我们不再使用当前台面上的文件,让我们可以控制 HEAD 应该指向的位置。

1、软重置

软重置会将 HEAD 移至指定的提交(或与 HEAD 相比的提交的索引),而不会移除该提交之后加入的修改!

在这里插入图片描述

输入 git status 后,你会看到我们仍然可以访问在之前的提交上做过的所有修改。

这意味着我们可以修复这些文件的内容,之后再重新提交它们!

2、硬重置

有时候我们并不想保留特定提交引入的修改。不同于软重置,我们应该再也无需访问它们。

Git 应该直接将整体状态直接重置到特定提交之前的状态:这甚至包括你在工作目录中和暂存文件上的修改。

我们重新 add 并 commit,然后硬重置:


回去查看文件 h.txt,添加的内容已经不存在,而我们所有提交的信息也都已经被移除。

六、还原

另一种撤销修改的方法是执行 git revert

通过对特定的提交执行还原操作,我们会创建一个包含已还原修改的新提交。

这个在新建一个 hh.txt 文件并提交:


git revert 撤销修改

有上图所示,执行 git revert 8edbe7 后,新增的 hh.txt 被删除了,并新提交了一个 commit。此前添加 hh.txt 的提交还在,这样就保留了该提交信息,提高了仓库的兼容性。

七、拣选

当一个特定分支包含我们的活动分支需要的某个提交时,我们对那个提交执行 cherry-pick

对一个提交执行 cherry-pick 时,我们会在活动分支上创建一个新的提交,其中包含由拣选出来的提交所引入的修改。

创建切换到 cherry 分支:

然后在分支 cherry 上修改文件 h.txt 并提交几个节点:

切回 master 分支:

执行:git cherry-pick bf221cb05

由上图所示,分支 cherry 的 commit bf221cb05,被复制到分支 master,并创建了 1 个新的提交 93cfeef。

通过该命令我们就可以将其他分支,需要的提交,合并到主分支 master。

标签:文件,Git,提交,git,branch,基本操作,分支
From: https://blog.csdn.net/Teminator_/article/details/142550611

相关文章

  • Git-如何区分使用个人账户和公司账户
    个人日常编写点小玩具,code的版本控制一般托管于GitHub,但是公司内部使用GitLb来进行代码版本控制,这样为了能够在同一台MacBook(自带,公司有补贴)日常区分出两个账户,通过翻阅资料做了如下配置。操作环境MacBookGit(gitversion2.39.5)命令行终端SSH密钥生成在终端,使......
  • Github使用技巧
    1、怎么查找对应关系 一般查找对应关系,可以去阅读下面的说明: 2、0.20.Release版本不存在的问题如上图:根本不知道0.2.1.RELEASE对应的dubbo-spring-boot-start版本是多少,在maven仓库中根本没有这个版本解释:这里需要我们点击这个版本,然后就会跳转到这个代码上,如下图: ......
  • hexo部署报错:Deployer not found: git
    一、报错将hexo部署到Github时发生Deployernotfound:git报错二、报错原因及解决方法报错原因在初次部署hexo时没有安装hexo-deployer-git插件导致部署时发生Deployernotfound:git报错 解决方法1.执行cnpminstallhexo-deployer-git--save或npminstallhexo-d......
  • GitLab 中文版如何升级到最新的 17.4?
    本文分享极狐GitLab17.4升级的详细步骤。今日,极狐GitLab17.4正式发布。新版本发布了几十项与DevSecOps相关的更新,包括项目管理、源代码托管、CI/CD、安全合规等。对于用户来讲及时升级到最新版本不仅能够第一时间体验到最新功能,更重要的是能够避免老旧版本存在的安全风险而遭......
  • 揭秘 Git-stash:掌握暂存技巧,让代码更整洁!
    stash可以冻结目前的状态‍在gitstash出现之前当我们在开发一个新功能的时候,突然来了一个紧急的bug要修复,此时我们可以创建一个分支去修复它;但如果,切换会导致冲突的话,就会切换失败。我们来模拟下(先确保工作区是干净的):$gitbranchbug02$echo"test">>3-branch/br......
  • Git 分支管理全攻略:一篇博客带你玩转代码分支!
    什么是分支?在Git里,分支其实就有点像一个树的枝杈,每个分支上可以有不同的文件的版本,并且不会互相干扰。​分支功能有什么用?在工作中,我们经常是需要和别人一起开发一个项目的,此时可能你开发A功能,别人开发B功能;如果只有一个分支的话,那么所有人都得在这个分支上干活;如果你开发......
  • 关于 GitHub 的奇技淫巧
    介绍下多年来使用GitHub所了解到的技巧‍学会看文档如何学习使用GitHub呢?最好的方式就是:阅读官网文档。官方文档通常比任何教程都全面、权威、准确。网上教程和文章满天飞,但都是建立在官方文档的基础上,一旦官方文档修改了,很难做到实时同步,就可能会让学习者感到困惑。对......
  • 掌握 Git 远程仓库,让团队协作更上一层楼
    介绍下远程仓库的概念、常见的远程仓库以及常见的操作。‍‍什么是远程仓库目前,我们的版本库都是在自己的电脑上,并不方便给别人访问,更别说一起维护一个版本库了;如果我们的电脑关机了(或者坏了),岂不是别人就没法干活了?因此,我们通常需要找一台服务器,存放我们的版本库;然后,其他人就......
  • centos7安装gitlab并汉化
    一、基础环境准备1.安装依赖包[root@gitlab-server~]#yuminstallcurlpolicycoreutilsopenssh-serveropenssh-clientspostfixwgetgitpatch-y[root@gitlab-server~]#systemctlstartpostfix2.配置yum源(由于网络问题,国内用户,建议使用清华大学的镜像源进行安装)[root@g......
  • git修改某些指定提交的履历信息
    一,关于gitrebase-ihead~n的命令,可以修改某个提交的提交履历1,gitlog查看提交log,确认需要修改的commit2,gitrebase-ihead~2(以修改最后的两次提交的履历为例)3,进入gitvim编辑页面,按键盘i进入编辑模式,将需要修改履历的两条提交的“pick”改为“r”(此时不需要改履历信息)4,按......