git必需基本操作指令

2023-12-08 13:20
文章标签 基本操作 指令 git 必需

本文主要是介绍git必需基本操作指令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

●git branch——显示分支一览表
  补充:git branch命令可以将分支名列表显示,同时可以确认当前所在分支。

●git checkout -b——创建、切换分支
  补充:如果想以当前的master 分支为基础创建新的分支,我们需要用到git checkout -b命令。

     执行下面的命令,创建名为feature-A 的分支并切换至feature-A分支。

$ git checkout -b feature-A

     实际上,连续执行下面两条命令也能收到同样效果。

$ git branch feature-A
$ git checkout feature-A 

●切换到master 分支

$ git checkout master

●切换回上一个分支

$ git checkout -

  补充:像上面这样用“-”(连字符)代替分支名,就可以切换至上一个分支。当然,将“-”替换成feature-A 同样可以切换到feature-A 分支

●git merge——合并分支

  补充:我们假设feature-A 已经实现完毕,想要将它合并到主干分支master 中。首先切换到master 分支。

$ git checkout master
Switched to branch 'master'

  然后合并feature-A 分支。为了在历史记录中明确记录下本次分支合并,我们需要创建合并提交。因此,在合并时加上--no-ff参数。

$ git merge --no-ff feature-A

  随后编辑器会启动,用于录入合并提交的信息

Merge branch 'feature-A'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.

  默认信息中已经包含了是从feature-A 分支合并过来的相关内容,所以可不必做任何更改。将编辑器中显示的内容保存,关闭编辑

  类似vi编辑命令中使用

  首先使用esc(键退出)->:(符号输入)->wq(保存退出)

:wq(保存编辑操作退出)
:wq!(保存编辑强制退出)

●git log --graph——以图表形式查看分支

  补充:git log --graph命令可以用图表形式输出提交日志,非常直观,请大家务必记住。

$ git log --graph

●git reset——回溯历史版本

  补充:比如我们前面已经有了feature-A分支,并且提交了master主干,那么回溯历史版本到没有feature-A分支的提交,然后创建一个名为fix-B 的特性分支

  查看操作日志,找到对应的标时间点的哈希值

git reflog

  要让仓库的HEAD、暂存区、当前工作树回溯到指定状态,需要用到git rest --hard命令

$ git reset --hard fd0cbf0d4a25f747230694d95cac1be72d33441d
HEAD is now at fd0cbf0 Add index

  我们已经成功回溯到特性分支(feature-A)创建之前的状态。由于所有文件都回溯到了指定哈希值对应的时间点上,文件的内容也恢复到了当时的状态。

  现在我们来创建特性分支(fix-B)

$ git checkout -b fix-B
Switched to a new branch 'fix-B'

  推进至feature-A 分支合并后的状态,首先恢复到feature-A 分支合并后的状态。不妨称这一操作为“推进历史”。

  git log命令只能查看以当前状态为终点的历史日志。所以这里要使用git reflog命令,查看当前仓库的操作日志。

  在日志中找出回溯历史之前的哈希值,通过git reset --hard命令恢复到回溯历史前的状态。

  首先执行git reflog 命令,查看当前仓库执行过的操作的日志。

$ git reflog
4096d9e HEAD@{0}: commit: Fix B
fd0cbf0 HEAD@{1}: checkout: moving from master to fix-B
fd0cbf0 HEAD@{2}: reset: moving to fd0cbf0d4a25f747230694d95cac1be72d33441d
83b0b94 HEAD@{3}: merge feature-A: Merge made by the 'recursive' strategy.
fd0cbf0 HEAD@{4}: checkout: moving from feature-A to master
8a6c8b9 HEAD@{5}: checkout: moving from master to feature-A
fd0cbf0 HEAD@{6}: checkout: moving from feature-A to master
8a6c8b9 HEAD@{7}: commit: Add feature-A
fd0cbf0 HEAD@{8}: checkout: moving from master to feature-A
fd0cbf0 HEAD@{9}: commit: Add index
9f129ba HEAD@{10}: commit (initial): First commit

  从上面数第四行表示feature-A 特性分支合并后的状态,对应哈希值为83b0b94A。我们将HEAD、暂存区、工作树恢复到这个时间点的状态

$ git checkout master
$ git reset --hard 83b0b94
HEAD is now at 83b0b94 Merge branch 'feature-A'

  

  现在只要合并fix-B 分支,就可以得到我们想要的状态

$ git merge --no-ff fix-B
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Recorded preimage for 'README.md'
Automatic merge failed; fix conflicts and then commit the result.

  这时,系统告诉我们README.md 文件发生了冲突(Conflict)。

  系统在合并README.md 文件时,feature-A 分支更改的部分与本次想要合并的fix-B 分支更改的部分发生了冲突。

  不解决冲突就无法完成合并,所以我们打开README.md 文件,解决这个冲突。然后再进行提交,冲突解决后,执行git add命令与git commit命令。

●git commit --amend——修改提交信息

  补充:要修改上一条提交信息,可以使用git commit --amend命令

$ git commit --amend

  然后保存编辑并提交即可(ESC->:wq)

   随后会显示上面这条结果。现在执行git log --graph命令,可以看到提交日志中的相应内容也已经被修改

$ git log --graph
* commit 2e7db6fb0b576e9946965ea680e4834ee889c9d8
|\ Merge: 83b0b94 4096d9e
| | Author: hirocaster <hohtsuka@gmail.com>
| | Date: Sun May 5 16:58:27 2013 +0900
| |
| | Merge branch 'fix-B'
| |
| * commit 4096d9e856995a1aafa982aabb52bfc0da656b74
| | Author: hirocaster <hohtsuka@gmail.com>
| | Date: Sun May 5 16:50:31 2013 +0900
| |
| | Fix B
| |
* | commit 83b0b94268675cb715ac6c8a5bc1965938c15f62
|\ \ Merge: fd0cbf0 8a6c8b9
| |/ Author: hirocaster <hohtsuka@gmail.com>
|/| Date: Sun May 5 16:37:57 2013 +0900
| |
| | Merge branch 'feature-A'
| |
| * commit 8a6c8b97c8962cd44afb69c65f26d6e1a6c088d8
|/ Author: hirocaster <hohtsuka@gmail.com>
| Date: Sun May 5 16:22:02 2013 +0900
|
| Add feature-A
|
* commit fd0cbf0d4a25f747230694d95cac1be72d33441d
| Author: hirocaster <hohtsuka@gmail.com>
| Date: Sun May 5 16:10:15 2013 +0900
|
| Add index
|
* commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:06:49 2013 +0900
First commit

  ●git rebase -i——压缩历史

   补充:在合并特性分支之前,如果发现已提交的内容中有些许拼写错误等,

  不妨提交一个修改,然后将这个修改包含到前一个提交之中,压缩成一个

  历史记录。这是个会经常用到的技巧,让我们来实际操作体会一下;HEAD~表示上一次提交的,HEAD~2表示上两次提交的...以此类推

$ git rebase -i HEAD~2

  用上述方式执行git rebase命令,可以选定当前分支中包含HEAD(最新提交)在内的两个最新历史记录为对象,并在编辑器中打开

pick 7a34294 Add feature-C
pick 6fba227 Fix typo
# Rebase 2e7db6f..6fba227 onto 2e7db6f
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

  我们将6fba227 的Fix typo 的历史记录压缩到7a34294 的Add feature-C里。按照下图所示,将6fba227 左侧的pick 部分删除,改写为fixup,保存编辑器里的内容,关闭编辑器

pick 7a34294 Add feature-C
fixup 6fba227 Fix typo
[detached HEAD 51440c5] Add feature-C
1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/feature-C.

  现在再查看提交日志时会发现Add feature-C 的哈希值已经不是7a34294 了,这证明提交已经被更改

$ git log --graph

推送至远程仓库

  在GitHub上新建一个仓库

●git remote add——添加远程仓库

  补充:在GitHub 上创建的仓库路径为“https://github.com/用户名/仓库名.git”(类似这样https://github.com/city85/git-learn.git)。现在我们用git remote add命令将它设置成本地仓库的远程仓库

$ git remote add origin https://github.com/city85/git-learn.git

  按照上述格式执行git remote add命令之后,Git 会自动将https://github.com/city85/git-learn.git远程仓库的名称设置为origin(标识符)。

●git push——推送至远程仓库

  补充:如果想将当前分支下本地仓库中的内容推送给远程仓库,需要用到git push命令。现在假定我们在master 分支下进行操作

git push -u origin master

  像这样执行git push命令,当前分支的内容就会被推送给远程仓库origin 的master 分支。

  -u参数可以在推送的同时,将origin 仓库的master 分支设置为本地仓库当前分支的upstream(上游)。

  添加了这个参数,将来运行git pull命令从远程仓库获取内容时,

  本地仓库的这个分支就可以直接从origin 的master 分支获取内容,

  省去了另外添加参数的麻烦。执行该操作后,当前本地仓库master 分支的内容将会被推送到GitHub 的远程仓库中

推送至master 以外的分支

  除了master 分支之外,远程仓库也可以创建其他分支。举个例子,我们在本地仓库中创建feature-D 分支,并将它以同名形式push 至远程仓库。

$ git checkout -b feature-D
Switched to a new branch 'feature-D'

  我们在本地仓库中创建了feature-D 分支,现在将它push 给远程仓库并保持分支名称不变。

$ git push -u origin feature-D
Total 0 (delta 0), reused 0 (delta 0)

从远程仓库获取

●git clone——获取远程仓库

  补充:首先我们换到其他目录下,将GitHub 上的仓库clone 到本地。注意不要与之前操作的仓库在同一目录下。

$ git clone https://github.com/city85/git-learn.git

  执行git clone命令后我们会默认处于master 分支下,同时系统会自动将origin 设置成该远程仓库的标识符。也就是说,当前本地仓库的master 分支与GitHub 端远程仓库(origin)的master 分支在内容上是完全相同的

git branch -a——查看当前分支的相关信息

  补充:添加-a参数可以同时显示本地仓库和远程仓库的分支信息

$ git branch -a

获取远程的feature-D 分支

  补充:我们试着将feature-D 分支获取至本地仓库。

  -b 参数的后面是本地仓库中新建分支的名称。为了便于理解,

  我们仍将其命名为feature-D,让它与远程仓库的对应分支保持同名。

  新建分支名称后面是获取来源的分支名称。例子中指定了origin/feature-D,

  就是说以名为origin 的仓库(这里指GitHub 端的仓库)的feature-D 分支为来源,在本地仓库中创建feature-D 分支

$ git checkout -b feature-D origin/feature-D

向本地的feature-D 分支提交更改

  补充:-am 直接添加并提交

$ git commit -am "Add feature-D"

推送feature-D 分支

$ git push

git pull——获取最新的远程仓库分支

$ git pull origin feature-D

  补充:如果两人同时修改了同一部分的源代码,push 时就很容易发生冲突。所以多名开发者在同一个分支中进行作业时,为减少冲突情况的发生建议更频繁地进行push 和pull 操作

转载于:https://www.cnblogs.com/city85/p/9747559.html

这篇关于git必需基本操作指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/469988

相关文章

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓