如何使用git工具进行分支管理——git入门操作

如何进行分支管理

  • Time:2020/3/17

写在前面:在上一份教程里,我们学习了基本的拉取和推送操作。但是作为最强大的版本控制工具,git最重要的功能之一是版本管理。在接下来的教程里我们着重进行分支管理的学习,同时学习一些git工具知识以及新的好用的命令。
在这次的教程里我使用了markdown文件格式,也希望大家能够借此机会学习md文件的编写,这对一个工程人员来说也是必要的技能。

这是我们这次教程的部分命令预览,当然远不仅此

git init Resp
git add .
git add file
git commit
git status
git log
git reset --hard
git reflog
git branch
git checkout
git diff
gitk

让我们开始吧

备注:$ 后面的命令是自己type的,其他的为git返回信息

首先我们找到我们的Android项目路径文件,然后用cd命令进入。注意不能有中文路径。

$ cd CustomAPI_testapp/

接下来我们在此目录下新建本地仓库,并将所有文件添加git暂存区

$ git init  
Initialized empty Git repository in D:/Repository/CustomAPI_testapp/.git/  

$ git add -A  
The file will have its original line endings in your working directory

这下在这个文件夹里面就生成了一个.git目录,这个目录下就记录了我们新建仓库的信息

接下来我们设置一下远程的仓库,并试着推送

我们需要在Gitlab服务器新建一个Project,并且复制我们的ssh地址,然后使用git remote add 命令。然后查看远程和本地地址。

$ git remote add origin git@172.25.141.217:qiaodi/costomapi.git

$ git remote -v
origin  git@172.25.141.217:qiaodi/costomapi.git (fetch)
origin  git@172.25.141.217:qiaodi/costomapi.git (push)

以上两个地址相同表明我们本地仓库和remote仓库拉取和推送的仓库已经设置好了,仓库的默认名称是origin。接下来我们就可以commit了

$ git commit -m "First commit of CostomA"
[master (root-commit) ff58dfd] First commit of CostomA 43 files changed, 1226 insertions(+)
...

接下来我们进行推送。使用git push.

这个时候会报错,这是因为我们只是在本地默认设置了分支master,但是remote端的分支我们没有进行设置。

于是尝试使用系统推荐的命令git push --set-upstream origin master.

这个命令的意思是将本地的分支推送到远程,并且远端的分支名字与本地相同,都为master。而本地的master则是在新建仓库的时候默认的名字,当然也可以更改分支名字。如下:

$ git push  
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

git push --set-upstream origin master

$ git push --set-upstream origin master  
Enumerating objects: 77, done.
Counting objects: 100% (77/77), done.Delta compression using up to 8 threads Compressing objects: 100% (62/62), done.
Writing objects: 100% (77/77), 126.42 KiB | 3.33 MiB/s, done.
Total 77 (delta 2), reused 0 (delta 0)
To 172.25.141.217:qiaodi/costomapi.git
* [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

这个时候我们就会发现远程的仓库已经上传成功了,并且默认新建了分支master

我们试着用git log命令查看推送日志

$ git log
commit ff58dfd151672e68b9c9b52ad8920c39688bb503 (HEAD -> master, origin/master)
Author: 
Date:   Tue Mar 17 10:18:45 2020 +0800

First commit of CostomA

其中ff58dfd开头的一长串的是我们这次commit的哈希值。后面我们会用到这个进行版本回退处理。


多人协作开发

可以这样说,如果是个人开发,那么git工具的作用其实微乎其微。但是在面对多人开发的时候,git工具的强大之处就能发挥的淋漓尽致了。接下来我们进行多人协同开发模式的教学,以适应我们进行API的开发项目。

Let’s get it started!正片开始!

经过以上的设置,在本地建立好仓库,添加远程仓库地址等之后,我们基础的配置已经完成了,接下来我们会很容易进行以下内容。本节我们待实现的内容是:

  • 多人协同开发同一份工程
  • 每个人随时获取工程上的内容,并合并到自己的分支上
  • 每个人随时上传自己工程上自己修改的内容

在前面我们已经知道从远程下载代码和从本地push代码的命令了。
我们使用命令:

git clone git@172.25.141.217:qiaodi/costomapi.git

命令进行clone,这条命令能够clone工程里面所有的文件。
我们使用命令:

git push origin master

进行代码的整个push。但是事实上使用push方法推送的只是本地上修改过的文件。并非全部工程文件。而修改过的文件则是使用命令git add . 进行添加的,这条命令的意思是将修改的文件加入暂存区,在使用commit命令的时候则对暂存区的文件进行commit,然后push。
大家可能注意到在上面的教程中我使用了命令:

git add -A

这条命令的意思是将所有的文件都加入暂存区,理解两个命令的区别。
那么有没有命令能将云端的代码同样的方法进行下载呢?当然是有的。我们在刚上传的工程app/src/main/java/com/dfl/hvac/中添加一个test.java文件。然后使用以下命令git fetch命令。此命令会新建一个origin/master分支(此分支不是广义的分支)

$ git fetch origin master
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 10 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (10/10), done.
From 172.25.141.217:qiaodi/costomapi
* branch            master     -> FETCH_HEAD
  ff58dfd..32cc9bd  master     -> origin/master

然后使用git diff命令查看

$ git diff origin/master
diff --git a/app/src/main/java/com/dfl/hvac/test.java b/app/src/main/java/com/dfl/hvac/test.java
deleted file mode 100644
index e69de29..0000000

可以看到提示信息说明我们有一个文件发生了更改。在这里如果多人协作开发必须确认一下发生修改的文件是什么文件,是否是和自己相关的文件。因为这样的操作再进行分支合并之后会覆盖自己的文件的。

确认无误后使用命令进行合并操作

$ git merge origin/master
Updating ff58dfd..32cc9bd
Fast-forward
app/src/main/java/com/dfl/hvac/test.java | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 app/src/main/java/com/dfl/hvac/test.java

再回到本地会发现在相应的文件夹下面多了test.java文件。

运用此方法会方便的进行代码的多人协同开发:
项目负责人新建一个空工程,建好相关的空文件夹,然后安排不同的人开发不同的模块代码,大家共同编辑同一个工程。
但是请注意以下几点:

  • 每个人都可以修改别人的文件,为此需要小心不要修改
  • 拉取代码时需要进行版本对比,确定自己的代码时候修改
  • 如以上情况发生,务必使用版本控制进行回退

在项目负责人新建空工程的时候也需要注意Android代码里面各个gitignore文件的内容,这个文件限定了git工具代码的上传,因为那些代码并非必要。但是作为一个完整的工程来说,最好放在上面,否则代码可能不全。


分支管理与版本回退

导读: 这一节主要讲解利用git工具进行版本管理和相关的分支管理等内容。

我们试着新建一个分支,并查看分支:

$ git branch newbranch
$ git branch -v
* master    32cc9bd Add new file
  newbranch 32cc9bd Add new file

我们已经新建了一个分支了。然后我们切换分支进行编辑:

$ git checkout newbranch
witched to branch 'newbranch'

这个时候我们进行的任何commit(不进行push)都会在newbranch这个分支下进行。(只要我们不push,则所有的操作都是在本地进行,不会改变云端的数据)

我们试着在本地仓库根目录下新建一个内容只有1的文件,然后进行add和commit。

$ echo 1 >> testfile
$ git commit -m "branch test"
[newbranch 025ffc6] branch test
2 files changed, 1 insertion(+)
create mode 100644 FETCH_HEAD
create mode 100644 testfile

提示我们有两个文件发生了更改,其中一个是我们新建的,另一个git是自动生成的文件,在此不做过多探究,感兴趣的话可以了解一下HEAD(分支指针)在git中的作用。

打印日志

$ git log
commit 025ffc6436dcb1554a95e53d53c5d2c1e7008703 (HEAD -> newbranch)
Author: 
Date:   Tue Mar 17 14:02:55 2020 +0800

    branch test

commit 32cc9bd60a71bbab6c9dab3ae57f88b9ef56174b (origin/master, master)
Author: 
Date:   Tue Mar 17 11:05:06 2020 +0800

    Add new file

commit ff58dfd151672e68b9c9b52ad8920c39688bb503
Author: 
Date:   Tue Mar 17 10:18:45 2020 +0800

    First commit of CostomA

最上面的一个commit是我们最近进行的操作,如果想进行本地commit回退的话,比如说回退到第二个commit,使用如下命令,其中后面的数字是每次提交的哈希码(因为哈希码重复概率很小,所以只用前几位表示整个哈希码了)。

$ git reset --hard 32cc9bd
HEAD is now at 32cc9bd Add new file

此时在你commit的版本中就回退到上一次commit了。(在此之前注意不要进行push,push的内容是commit的内容,commit的内容进行版本回退再进行push就可以对云端版本进行更改,不理解没关系,这涉及到git工具底层的工作流程,有兴趣可以查阅相关资料)我们在进行git log一下,会发现最上面的一个commit已经没了,只剩下两个commit。

如果后悔进行版本回退,我们使用如下代码,然后操作同上:

$ git reflog

我们新建了一个newbranch分支,如何上传呢?我们现在在newbranch分支下进行git push会报错,因为remote没有相应的分支。上面讲过,使用

$ git push --set-upstream origin newbranch

此时查看结果,在服务器上可以看到有了一个newbranch分支,并且在该分支下有testfile文件

至此,本地分支管理的基本用法已经介绍完了。更多的内容还请大家灵活运用。接下来我们补充内容: clone指定分支

$ git clone <远程仓库地址>

这条命名默认clone的是master分支的内容。如果要clone制定分支可以试试 新建一个本地仓库,然后使用如下命令:

$ git clone -b <指定分支名> <远程仓库地址>

Android的.gitignore文件

git工具进行版本管理时会读取.gitignore文件,并将.gitignore文件中的内容排除在外,因为这些内容是编译器自动生成的文件并且量很大,所以为了减少时间经常把这部分内容排除在版本控制之外。这也是为什么上传工程之后代码占用存储大大减少的原因。我们也可自定义添加里面内容,更加方便地进行版本管理。
app/.gitignore中的内容:

/build

我们可以添加上:

/build
/src/test

等类似的内容灵活控制管理自己代码。

其他小技巧

$ gitk

灵活地打开git的GUI版本,在View视图中添加新视图可以观察到自己commit的可视化信息。

$ git log

可以灵活使用打印日志,进行相关问题追踪。

$ git status

可以灵活查看当前状态,包括文件增删查改等,信息一目了然。

其他:To be continued

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值