git版本管理:分支合并常用命令

这篇具有很好参考价值的文章主要介绍了git版本管理:分支合并常用命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常用命令

git clone <repo-url> # 拷贝项目到本地
git branch <new-branch> # 创建新分支
git checkout <new-branch> # 切换到新分支
git checkout -b <new-branch> # 创建并切换到新分支

git fetch <repo-name> <branch-01> # 从远程获取repo
git pull <repo-name> <remote-branch>:<local-branch> # 获取远程remote分支,合并到本地local分支
git pull # 获取并合并到本地当前分支

git add . # 添加全部改动
git commit -m "msg" # 提交当前分支到本地
git push <repo-name> <local-branch>:<remote-branch> # 提交本地更改到远程
git push origin <new-branch># 提交新的本地分支,这里的origin就是默认的<repo-name>

git checkout main # 切换回主分支
git merge <new-branch> # 合并其他分支<new-branch>到main
git branch -d <old-branch> # 删除已经用完的分支<old-branch> 

git reset --hard origin/master # 直接用fetch的线上版本覆盖本地分支
git reset HEAD # 回退到上一版本
git restore --staged readme.md 
git checkout -- readme.md
git checkout 07ed0f4 src/main.cpp # 回退文件到特定版本

常用命令在这里:https://www.runoob.com/git/git-basic-operations.html

fetch and remote

全部来自这个知乎专栏:杨世伟

远程repo

git remote -v(这个命令没什么用)

默认执行git remote命令后会列出之前设置过的所有远端仓库的别名

$ git remote

展示当前关联的其他仓库列表

$ git remote -v

与上面的命令一样,但是输出会包含每一个仓库的URL.

$ git remote add <repo-name> <repo-url>

上面的命令创建了一个与远端仓库的关联关系。在此之后,你就可以使用作为这个仓库的别名在其他git命令中使用。

$ git remote rm <name>

删除别名为的远端仓库的关联关系。

$ git remote rename <old-name> <new-name>

将别名为< old-name>的远端仓库的关联关系重命名为< new-name>。

HTTP 还是 SSH

Git支持通过很多方式来访问远端仓库。其中最简单的两种方式是通过HTTP和SSH协议。HTTP协议通常用于允许匿名只读访问仓库。比如:

http://host/path/to/repo.git

但是,通常来说通过HTTP地址的访问都无法进行push操作(应该不会有人愿意让匿名用户进行push操作)。对于可读可写的操作,应该使用SSH协议

ssh://user@host/path/to/repo.git

通过SSH协议访问时,Git托管主机上应该有你的一个合法SSH账号,除此之外你无需进行其他任何配置,Git的具名SSH访问能力是开箱即用的。通常第三方托管平台,会提供你的Git项目的URL。

SSH如何使用

实测还是ssh好用
git 合并分支命令,coding,git

一旦生成ssh key之后就不用像https一样每次都输入临时密码了。

下面这篇笔记讲了如何使用SSH key :
印象笔记——dev.azure uses SSH key to git clone

git pull=git fetch+git merge

git fetch

git pullgit fetch 这两个命令都可以用于下载远端仓库。你可以认为git fetch是这两者中更加安全的那个,即便下载了远端的内容,但也不会更新你本地仓库的版本状态,以保证你本地当前代码完好无损。反观git pull命令则是一个更加激进的命令,它会下载当前正在工作的分支对应的远端内容,并且在下载成功之后马上执行一个git merge命令,为新下载下来的远端内容创建一次merge commit。此时如果你有正在进行中的工作还没准备好进行合并,这些行为可能会造成代码冲突,然后马上进入合并代码过程中解决冲突的流程。

获取远程分支1

以下来自 知乎专栏——同步GIT仓库的操作 – fetch命令

git fetch <remote>

Fetch仓库中所有分支。同时也会下载指定远端的所有commits和文件。

git fetch <remote> <branch>

与上面的命令同样,但只会fetch指定分支。

git fetch --all

fetch所有已注册过的远端仓库的全部分支。

获取远程分支2

以下来自 菜鸟教程——git fetch 命令

假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行:

git fetch [alias]

以上命令告诉 Git 去获取它有你没有的数据,然后你可以执行:

git merge [alias]/[branch]

以上命令将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。

git pull origin remote-branch01:local-branch01

将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。

$ git pull origin master:brantest

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull origin master

上面命令表示,取回 origin/master 分支,再与本地的 brantest 分支合并。

$ git pull origin new-branch

branch and merge

使用分支

git branch命令允许对分支进行创建、列举、重命名以及删除的操作。它不能进行切换分支或者将分叉的commit记录扔到其他分支里。因此git branch总是与git checkout以及git merge命令共同出现在使用场景中。

$ git branch <branch-name>

创建一个名为 的分支。但此命令并不会自动检出新创建的分支。

$ git branch -d <branch-name>

删除指定分支。这是一个安全的操作,因为当分支中含有未合并的变更时,Git会阻止这一次删除操作。

$ git branch -m <branch-name>

对于当前分支重命名为。

本地创建并使用分支

$ git branch branch01 # 创建新分支
$ git checkout branch01 # 选择所创建的分支

查看一下现在的分支状态:

$ git branch
    * branch01 
      master
      release

星号(*)表示当前所在分支。现在的状态是成功创建的新的分支并且已经切换到新分支上。创建并选择分支合并为一句:

git checkout -b branch01 

要注意此时你只是创建了这个分支。如需开始对新分支进行提交,要先选择这个新的分支,使用git checkout命令,然后再使用标准流程git addgit commit等命令。
本地分支与远端的联系尽量一致,如果本地相较于远程多出来的,可以删除。
$ git remote rm branch01

过程如下:

$ git checkout branch01
	M	README.md
	切换到分支 'branch01'
$ git add .
$ git commit -m "git branch"
	[branch01 9296183] git branch
	 1 file changed, 3 insertions(+), 1 deletion(-)
$ git push
	fatal: 当前分支 branch01 没有对应的上游分支。
为推送当前分支并建立与远程上游的跟踪,使用    git push --set-upstream origin branch01

可以发现当本地新建分支并要推送的时候,必须要选择是推送哪个分支。

将本地branch提交

$ git push <remote-repo-name> local-new-branch:remote-new-branch# 当地新分支提交到remote origin的新分支

以上命令先添加了远程仓库,然后将本地分支branch01推向远程,如果仓库里没有这一分支,就创建同名的分支。

实际情况没有这么复杂。假如我们实在一个repo上改动,那是不变的,也就是origin。远程分支与本地分支同名

$ git push origin branch01 # 当地分支提交到远程仓库

使用
git branch -a
查看所有分支,会看到
remotes/origin/dbg_lichen_star
这个远程分支,说明新建远程分支成功。

删除远程分支

我比较喜欢的简单方式,推送一个空分支到远程分支,其实就相当于删除远程分支:

$ git push origin :dbg_lichen_star

也可以使用:

$ git push origin --delete dbg_lichen_star

CSDN博客「-FIGHTING-」

合并

merge

如果要合并到main分支,是这样做的

$ git checkout main
$ git merge branch01
$ git push -u origin main

用带参数的git log也可以看到分支的合并情况

$ git log --graph --pretty=oneline --abbrev-commit

知乎 专栏 - Git——如何解决 Git 中的合并冲突?

git reset 强制覆盖本地代码

由于new-branch是在Azure网站上在线更改的,没有本地备份,因此在fetch整个

git强制覆盖:

$ git fetch --all # 拉取所有更新,不同步
$ git reset --hard origin/master # 直接用线上版本覆盖本地分支
$ git pull # 再更新一次

第一个是:拉取所有更新,不同步;

第二个是:本地代码同步线上最新版本(会覆盖本地所有与远程仓库上同名的文件);

第三个是:再更新一次(其实也可以不用,第二步命令做过了其实)

原文链接:【git】强制覆盖本地代码(与git远程仓库保持一致)

全部恢复至某个历史版本

git reset --hard 历史版本号b1c
git push -f origin master # 强制推送

撤回更改

舍弃更改

遇到切换分支时,报错“请在切换分支/合并前提交或贮藏您的修改”,或“尚未暂存以备提交的变更”,那就是:修改了此文件并且没有add和commit.然后你在branch、pull时就会出现此提示。参考:git pull时:对下列文件的本地修改将被合并操作覆盖

$ git restore --staged README.md
$ git checkout -- README.md

执行commit后,还没执行push时,想要撤销这次的commit,该怎么办?

git reset --soft HEAD^

这样就成功撤销了commit,如果想要连着add也撤销的话,–soft改为–hard(删除工作空间的改动代码)。

另外一点,如果commit注释写错了,先要改一下注释,有其他方法也能实现,如:

git commit --amend

这时候会进入vim编辑器,修改完成你要的注释后保存即可。

回滚部分文件到某个版本

还原单个文件

git checkout 07ed0f4a1b9118124df26d62ffa8c253ec540207 src/main.cpp

还原文件夹,使用相对路径(相对路径最开始不能有斜杠)

git checkout 07ed0f4a1b9118124df26d62ffa8c253ec540207 src/

上面的相对路径是相对运行bash命令的路径,而不是相对项目根目录的。

git 各类撤销命令

1.git add 后撤销:

撤销所有add文件

git reset HEAD .

撤销单个add文件

git reset HEAD -filename

2.git commit 后撤销:

只回退commit的信息,保留修改代码:

git reset --soft head

彻底回退到上次commit版本,不保留修改代码:

git reset --hard head^

说明:
HEAD :当前版本
HEAD^ :上一个版本
–hard 参数会抛弃当前工作区的修改
–soft 参数的话会回退到之前的版本,但是保留当前工作区的修改,可以重新提交

3.撤销所有本地改动代码:

git checkout .

4.本地代码回退到与git远程仓库保持一致

git reset --hard 远程分支名

5.git push撤销:

回滚此次push到服务器的代码:

git log #查看commit的信息
git revert 以前commit的id

此时本地回滚的代码到服务器就可以了

6.git merge 撤销:

git checkout 【行merge操作时所在的分支】
git reset --hard 【merge前的版本号】

git 去除指定文件、文件夹版本控制

git rm -r -f build # build为所要放弃的文件夹

查看本地与remote的异同

命令 作用
git diff 工作区 vs 暂存区
git diff head 工作区 vs 版本库
git diff --cached 暂存区 vs 版本库

CSDN-DRPrincess博客: Git三大特色之Stage(暂存区)

submodule

自己的项目添加子模块

git submodule add <url> path # 增加子模块

拷贝的项目带有子模块需要进入目录更新

别人写的项目如果有子项目,使用者git clone只能获取他的主程序,而没有这些submodule。如果git clone <repo-url> --recursive仍然不能获取到所有内容。可以尝试

git submodule update # 如果子模块目录下是空的,这样来更新
subpath/ $ git pull # 也可以直接进入子模块目录获取这些

当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,文件夹是空的。此时,只需执行如下命令:文章来源地址https://www.toymoban.com/news/detail-779546.html

git submodule init
git submodule update
# 或:
git submodule update --init --recursive

完整拷贝带有子模块的项目

git pull --recurse-submodules # update recursively all the submodules

ref

  1. 杨世伟的知乎专栏
  2. 知乎专栏——同步GIT仓库的操作 – fetch命令
  3. 知乎专栏——Git——如何解决 Git 中的合并冲突?
  4. 印象笔记——dev.azure uses SSH key to git clone
  5. 菜鸟教程——git 常用命令
  6. 菜鸟教程——git fetch 命令
  7. CSDN博客——【git】强制覆盖本地代码(与git远程仓库保持一致)
  8. CSDN博客——git pull时:对下列文件的本地修改将被合并操作覆盖
  9. CSDN博客——git commit后,如何撤销commit
  10. CSDN博客——git操作—克隆含有子模块的项目

到了这里,关于git版本管理:分支合并常用命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git学习 -- 分支合并、版本修改相关

    目录 learn GIT Learn Git Branching merge和rebase的使用 基础命令 版本回退 工作区和暂存区 管理修改 撤销修改 删除修改 learn GIT Learn Git Branching 这是Gitee上的Git学习教程 Learn Git Branching Git Rebase Learn Git Branching 最终的实操 merge和rebase的使用 参考: https://www.cnblogs.com/michael-xiang/p/131798

    2024年01月24日
    浏览(40)
  • git命令合并某一个分支的某个commit到目标分支

    1. 应用场景 在A分支上提交了一个commit,B分支也需要提交这个commit代码,避免人工复制代码,可以使用git命令行操作。 2. 基本用法(实例讲解) 比如,我们的仓库中有 master 和 pre-master 两个分支,现在只想将 f 提交到 master分支。 现在将 f 提交到master分支,其实这个f字母是打

    2024年02月02日
    浏览(58)
  • git-新建分支与提交代码命令(附删除、切换、查看、合并分支)

    注意:在你新建分支之前,你应该在master分支,并且要保证你当前的是最新代码,要不然最后提交代码就会出问题。 新建分支并切换到该分支: 在新建的分支上写完代码之后,就可以提交代码了。此时应该在你新建的分支上 注意:有报错就先pull一下代码再提交  

    2024年02月14日
    浏览(45)
  • git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支

    查看当前本地仓库中有哪些分支 HEAD所指向的分支就是当前正在工作的分支 创建一个分支 创建好了,但是目前还是指向 master 用tree命令也可以看到已经创建分支成功了 创建出来的分支,和主分支的最新记录是一样的 切换分支就是让HEAD指向我们的dev分支 我们在dev分支上堆R

    2024年02月04日
    浏览(39)
  • git常用场景记录 | 拉取远程分支A合并到本地分支B

    doing,最后更新9.19 需求描述 在团队合作时,我自己的本地分支B功能已经实现并合并到 feature ,之后发现别人的代码也合并到了 feature 。为了防止以后实现其他功能,合并到 feature 时产生冲突,决定拉取最新的 feature 并合并到本地分支B。 实现步骤 1. git checkout feature 本地切换

    2024年02月11日
    浏览(36)
  • Git的基础命令大全,拉取推送,分支,合并

    命令如下: 1. clone(克隆): 从远程仓库中克隆代码到本地仓库 2. checkout (检出):从本地仓库中检出一个仓库分支然后进行修订 3. add(添加): 在提交前先将代码提交到暂存区 4. commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本 5. fetch (抓取) : 从远程库

    2024年02月12日
    浏览(35)
  • git合并代码命令 分支合并代码 cherry-pick merge rebase区别

    1.cherry-pick 需要注意 暂存未提交的更改 暂存更改: 使用git stash或git stash push命令暂存当前工作目录和暂存区的更改。你可以提供一个消息作为参数,以便更容易地识别stash项: 执行cherry-pick: 现在,你的工作目录是干净的,可以安全地执行cherry-pick操作了。找到你想要cherry

    2024年04月12日
    浏览(39)
  • git实用命令 git常用分支命令

    要在Git中创建一个新的分支,按照以下步骤进行操作: 确保你当前在要创建分支的代码状态下。你可以使用 git status 命令查看当前的代码状态,并使用 git add 和 git commit 命令将修改的文件提交到当前分支。 1.使用 git branch 命令创建一个新的分支。 这将在本地仓库中创建一个

    2024年02月10日
    浏览(29)
  • Git创建新分支,分支常用命令

    注意新建的分支是基于当前所在的分支来创建的,比如当前处于develop分支,新建的分支就基于此分支 即在远程仓库用此分支的代码来新建此分支,只有第一次需要用 -u,后续都是正常的commit、push。 -u表示把本地分支和远程分支进行关联,远程仓库的别名一般是origi 查看所有

    2024年02月13日
    浏览(37)
  • Git笔记--分支常用命令

    目录 1--git branch -v 2--git branch 3--git checkout 4--git merge git branch -v 用于查看分支版本; git branch 用于创建分支; git checkout 用于切换分支,更改工作区的文件不会影响其它分支(前提是 修改的文件需要在修改的分支里进行git commit) git merge 用于合并分支,假设当前分支是 xxxxx,上

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包