git分支概念与项目中的应用

文档:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B

分支理解

  • master分支是项目在创建时候的默认分支,除此之外,它并没有更多的含义。
  • 剩下的 “开发分支”,“灰度分支”, “预发布分支”, “需求分支”,“测试分支” 都是根据项目和需求约定的。它们本质上只是一个分支而已。

分支在项目中的应用

1、首先,我们创建了一个项目:

http://10.2.16.183/zhiheng/myproject

这是我局域网搭建的gitlab,我们就以这个项目为例。

2、项目的基本流程:

  • 克隆项目到本地
> git clone http://10.2.16.183/zhiheng/myproject

Cloning into 'myproject'...
warning: redirecting to http://10.2.16.183/zhiheng/myproject.git/
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.

切换到项目:
> cd  myproject
  • 查看当前状态
> git status

On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/
    a.py

nothing added to commit but untracked files present (use "git add" to track)
  • 提交代码
> git add a.py
> git commit -m "first file"
> git push origin master

3、分支的使用

为什么要使用分支?

1、你在开发项目里面一个很大的模块,这个模块需要连续开发一个月,你可以选择一个月提交一次,但一个月的开发代码都存在你的本地电脑是很危险的。万一电脑丢失,代码被误删,损失很大!

2、你们团队的项目有十几个人在维护,每天会有N多次的提交,一旦你拉取和提交的间隙,被别人提交了代码,当你在提交的时候别人就需要解决冲突。每次解决和提交冲突是很浪费时间的。

分支的使用

  • 查看所有分支(远程分支和本地分支)
> git branch -a

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  • 查看本地分支
> git branch -a
* master
  • 创建分支
> git branch dev
  • 切换分支
> git checkout dev

当你当前分支有未提交的文件时,不允许你提交分支。

  • 在 dev 分支上面操作

创建 dev_a.py 文件

dev> git status

On branch dev
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/
    dev_a.py

nothing added to commit but untracked files present (use "git add" to track)

dev> git add dev_a.py

dev> git commit -m "dev a file"
[dev ace2539] dev a file
 1 file changed, 1 insertion(+)
 create mode 100644 dev_a.py
  • 目前虽然本地多了一个 dev 分支, 但远程是没有的。
dev> git branch -a

* dev
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  • 提交到远程分支。
git push origin dev
warning: redirecting to http://10.2.16.183/zhiheng/myproject.git/
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 320 bytes | 320.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for dev, visit:
remote:   http://10.2.16.183/zhiheng/myproject/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote:
To http://10.2.16.183/zhiheng/myproject
 * [new branch]      dev -> dev
  • 再次查看所有分支, 远程分支也多了一个dev
dev> git branch -a
* dev
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
  • 不同分支下面,文件数量不一样。
## dev 分支
dev> ls
README.md    a.py      dev_a.py

## master分支
master> ls
README.md    a.py

4、代码的冲突与解决。

假设A 和 B 在一个分支上开发

1、A 拉取 common.py 文件,修改。
2、B 拉取 common.py 文件,修改。
3、B 提交了 common.py 文件的修改。
4、A 在提交 common.py 文件时就会遇到冲突, A 应该怎么做?

  • 拉取远程代码
git pull origin master
warning: redirecting to http://10.2.16.183/zhiheng/myproject.git/
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From http://10.2.16.183/zhiheng/myproject
 * branch            master     -> FETCH_HEAD
   ed59b2e..c166f93  master     -> origin/master
Updating ed59b2e..c166f93
error: Your local changes to the following files would be overwritten by merge:
    common.py
Please commit your changes or stash them before you merge.
Aborting

这个时候发现代码被 B 修改了,因为我本地也做了更新,所以不允许拉取。

  • 先提交提交代码,再拉取。
> git add common.py
> git commit -m "A 也修改了文件"
> git pull origin master
warning: redirecting to http://10.2.16.183/zhiheng/myproject.git/
From http://10.2.16.183/zhiheng/myproject
 * branch            master     -> FETCH_HEAD
Auto-merging common.py
CONFLICT (content): Merge conflict in common.py
Automatic merge failed; fix conflicts and then commit the result.
  • 解决冲突
vim common.py
# 这是一个公共文件

def common(a, b):
<<<<<<< HEAD
    c = a + b
    return c
=======
    return a + b
>>>>>>> c166f934de72779168cd00ef40bb96ff65e09ab5

开发的过程尽量避免多人改一个方法,像这样的冲突就比较解决了。 A和B需要坐到一起,这个冲突解决。

  • 重新提交冲突
> git add common.py
> git commit -m "合并冲突"
[master 485cfaa] 合并冲突
> git push origin master

5、分支的合并。

如果多个开发同时在一个分支上开发,上面的冲突每天要发生很多次。这将严重影响开发效率。 每个开发都在自己的分支上面开发。

  • A开发在 dev 分支。
git branch
  master
* dev

test> ls
README.md  a.py  dev1.py   dev2.py   dev_a.py
  • B开发在 test 分支。
git branch
  master
* test

test> ls
a.py  common.py  README.md  test1.py  test2.py

此时,两个分支的上的代码出现了较大的不同。

testdev合并到master

1、 在A电脑上有本地只有 master 和 dev ,可以直接合并。

> git merge dev
Merge made by the 'recursive' strategy.
 dev_a.py | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 dev_a.py

2、B电脑本地只有 master 和 test 分支。

  • B电脑:先把 test 分支推送
git add .
> git commit -m "test分支代码"
[test 14032ea] test分支代码
 2 files changed, 2 insertions(+)
 create mode 100644 test1.py
 create mode 100644 test2.py
> git push origin test
  • A电脑:本地创建 test 分支,拉取远程 test 分支的代码
> git branch test
> git checkout test
Switched to branch 'test'
> git pull
  • A电脑:回到 master 分支,合并 test 分支。
> git merge test
Updating 34fa4b3..7677952
Fast-forward
 test1.py | 1 +
 test2.py | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 test1.py
 create mode 100644 test2.py

> ls
README.md a.py common.py dev1.py   dev2.py   dev_a.py  test1.py  test2.py

master 分支就拥有了所有分支的代码。 在这个过程中,

1、在代码分支合并的过程中如果出现冲突,就要解决冲突。
2、我们在分支开发的过程中,也可以时长拉取master分支的内容,一般合并到master的代码都是相对完整的。这样可以避免master合并的时候出现过多的冲突。

原文地址:https://www.cnblogs.com/fnng/p/11664093.html

时间: 2024-10-10 08:38:17

git分支概念与项目中的应用的相关文章

git 分支推送项目

1.切换分支到指定的分支 git checkout -b 想要的分支名称 2.然后将从master中clone下来的项目删除,放上自己想要的项目 3.git add . 4.git commit -m ‘描述' 5.git branch --set-upstream-to=origin/分支  跟踪分支变化 6.git pull 7.git push 原文地址:https://www.cnblogs.com/MyUniverse/p/11331112.html

Git 如何只更新项目中某个目录里的文件

Git由于在远端和本地都有一个代码库, 这样更新单个文件比SVN要麻烦一点. 1. 如果想拿远端git服务器上的最新版本(或某个特定版本)覆盖本地的修改,可以使用git pull命令, 但这会全面更新本地代码库和工作拷贝. 2. 如果想放弃本地工作拷贝所做修改,可以使用git checkout file/to/path命令, 但该命令只能用本地库覆盖你的工作拷贝,并不能取得远端版本的更新. 所以,正确的方法应该是先更新本地库(但不更新工作拷贝),然后用本地库来更新单个的工作拷贝文件. 具体如下:

git 利用分支概念实现一个仓库管理两个项目

需求描述:开发了一个网站,上线之际,突然另一个客户说也想要个一样的网站,但网站的logo和内部展示图片需要替换一下,也就是说大部分的后台业务逻辑代码都是一致的,以后升级时功能也要保持一致:刚开始想反正是两个项目,干脆弄两个工程吧,但这样做的话,只有修改个公共的代码逻辑两个项目都要修改一遍,太麻烦了,还容易出错了,太麻烦了,难道没有个好的办法,修改一次代码,两个项目可以共用?突然想到了git的分支概念,我靠~单独再拉出个分支,这不一下就解决了: 前提假设:假设之前开发的网站叫a,另一个客户想要一模

在 Shell 提示符中显示 Git 分支名称

| 导语 如果你是用命令行来使用Git的话,当在一个项目中频繁使用多个分支时,可以使用 git status 命令查询自己现在正工作在哪个分支下面,不过难免有脑子发昏的时候,忘记自己在哪个分支下面,因而发生误操作之类的杯具. 那么把分支显示在 Shell 提示符中无疑方便了很多,再也不需要频繁的使用 git status 命令了… 废话不多,直接上代码,放到 ~/.bash_profile 或者 ~/.profile里即可 ## Parses out the branch name from .

git在本地项目中指定远程仓库地址并上传

其实可以有更简单的方法,就是在远程仓库建立仓库,然后用 git clone 仓库地址 命令来将远程仓库克隆到本地,然后再把我们之前的项目拷贝到该目录中,然后就是传统的git add git commit git push 等等. 这种情况很简单,但是个人觉得不是很专业,因为这样之后,我们本地可能又要重新import一次进入IDE(集成环境,但这都不是主要原因).更重要的是,我们直接clone下来,其实git的仓库环境都已经有了, 我们就不会再自己动手去匹配本地仓库和远程仓库的关系,然后久而久之,

[TFS4]TFS git地址,分支概念

1)上传本地代码到TFS a.Generate Git Credentials,即创建git账户密码 b)上传本地代码 git add *git commit -m "纳入管理" git remote add origin https://qiongyan2.visualstudio.com/_git/BeibeiCore2git push -u origin --all{{-u参考链接:https://www.zhihu.com/question/20019419/answer/83

git提交项目常用命令及git分支的用法

1.第一步首先从git托管平台clone项目,我这里就使用idea为例: 填写git的url与存放本地目录名及项目名 2.如果你对项目进行了一些修改,就可以执行git命令,进行提交. 有两种方法: 1.使用idea自带的图形界面进行操作.选中修改过的文件,右键选择git--add添加到本地仓库. 再选择git --commit file进行提交 再进行commit和push,提交到远程仓库 2.使用命令行方式,个人比较喜欢这种方式. 首先打开terminal 执行步骤是一样的: 1.git st

使用git命令创建分支到团队项目

背景 在我们的团队中,我作为管理者,创建了一个叫HelloWorld的项目,大家各自在本地进行开发,将自己的工作贡献到我们的团队项目中.为了便于审核,我希望大家先将自己的贡献先放在属于自己的一个分支上,以后,你把你每次的贡献都放在这个分支.等我审核后,认为你的贡献是用心的.有价值,我再合并到主分支.这个主分支的所有内容就是我们进行团队开发最终的成果!是不是很有成就感!话不多说,关于git的使用背景和常用操作,小林老师已经给了大家博客链接.下面,咱们就开门见山,跟着我边做边学! Step1:我们先

idea中git分支、合并与使用

1.分支的新建与合并使用场景介绍 让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流. 你将经历如下步骤: 开发某个网站. 为实现某个新的需求.问题(#53问题),创建一个分支(名为:iss53). 在这个分支上开展工作. 正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补. 你将按照如下方式来处理: 切换到你的线上分支(production branch). 为这个紧急任务新建一个分支(名为:hotfix),并在其中修复它. 在测试通过之后,切换回线上分支