侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 285 篇文章
  • 累计创建 125 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

git高频分支命令实战指南

孔子说JAVA
2022-04-26 / 0 评论 / 1 点赞 / 128 阅读 / 5,826 字 / 正在检测是否收录...

几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 Git 从版本控制系统家族里区分出来。

分支对于团队的作用是非常大的,如果一个项目现在是1.0.0版,那么开发团队可能要同事进行1.0.0版本和2.0.0版本的开发,这样代码分歧就很大,这时候我们利用分支处理不同的任务,减少代码相互间的影响。如果要新建一个功能,可以先新建一个分支,在新的分支上面编写代码,在编写完成测试完成后再合并到主分支中,这样做的好处是可以保证主分支的完整性和可用性,也就是说主分支的代码都是稳定的可以发布的代码。

1、远程分支命令

1.1 查看远程分支 git branch -r

  • 语法:git branch -r
E:\ideagit\projName>git branch -r
  git-svn
  origin/cicd
  origin/develop
  origin/master
  origin/release

1.2 查看远程分支和本地分支 git branch -a

  • 语法:git branch -a

查看所有远程分支和本地分支 git branch -a,其中 remotes/ 开头的分支为远程分支,在命令行窗口中显示为不同颜色。

E:\ideagit\mbd-bigscreen>git branch -a
  develop
* kongzi
  master
  remotes/git-svn
  remotes/origin/develop
  remotes/origin/kongzi
  remotes/origin/master
  remotes/origin/release

1.3 删除远程分支 origin/cicd

  • 语法:git push [remote] -d [remote-branch]
E:\ideagit\projName>git push origin -d cicd
To https://git.fzyun.io/media/bdc/mbd/codes/mbd-bigscreen.git
 - [deleted]         cicd

1.4 创建远程分支 git push origin kongzi

创建远程远程分支就是本地分支push到服务器上。比如master就是一个最典型的远程分支(默认)。

  • 语法:git push [remote] [remote-branch]
git push origin kongzi

2、本地分支命令

2.1 创建本地分支

新建一个分支,但依然停留在当前分支。

  • 语法:git branch [branch-name]

git branch 分支名,例如:git branch kongzi

2.2 查看本地分支

git branch 命令可以查看本地分支,可用来检查新分支是否创建成功。* 表示当前选中的分支。

  • 语法:git branch
E:\ideagit\projName>git branch
  develop
* kongzi
  master

2.3 切换(选择)本地分支

git checkout 分支名,切换到指定分支,并更新工作区。例如从master切换到kongzi:git checkout kongzi

  • 语法:git checkout [branch-name]

2.4 创建并切换分支

从已有的分支创建新的分支(如从master分支),并切换到该分支。如创建一个dev分支 git checkout -b dev

  • 语法:git checkout -b [new_branch] [remote-branch] , 可以不指定 remote-branch(远程分支)。
E:\ideagit\projName>git checkout -b kongzi
Switched to a new branch 'kongzi'

E:\ideagit\projName>git branch
  develop
* kongzi
  master

从上例可以看到,创建后自动切换到新分支。使用 git branch 命令可以查看到已经切换到了新分支。

2.5 删除本地分支

git branch -D kongzi,表示删除kongzi分支。注意删除时不能选中该分支。

  • 语法:git checkout -D [branch-name]
  • 如果想保留分支只是想删除已经合并的部分,只要把大写D改成小写的d就可以了。
E:\ideagit\projName>git branch -D kongzi
Deleted branch kongzi (was 2b94083).

2.6 在本地创建分支并与服务器分支关联

在本地创建分支并与服务器分支关联,即从远程服务器拉取分支并在本地创建一个同名分支。

  • 语法:git checkout --track [remote]/[remote-branch]
  • 远程分支和本地分支需要区分好,所以,在从服务器上拉取特定分支的时候,需要指定远程分支的名字。
  • 注意该命令由于带有--track参数,所以要求git1.6.4以上,这样git会自动切换到分支。
git checkout --track origin/kongzi

2.7 更新master主线上的东西到当前分支

当前选中分支为 kongzi, 将master主线上的东西到当前分支命令:git rebase master

  • 语法:git rebase [branch-name]
# 更新master主线上的东西到该分支上
git rebase master

# 切换到master分支
git checkout master

#更新mybranch分支上的东西到master上
git rebase mybranch

3、提交推送分支数据

3.1 git add 命令将更新数据写入暂存区

  • 语法:git add . 添加当前目录的所有文件到暂存区
  • 语法:git add <file1> <file2> ... 添加指定文件到暂存区
  • 语法:git add <dir> 添加指定目录到暂存区,包括其子目录
# 将当前目录下所有文件写入暂存区
git add ./

# 将当前目录下以 .c 结尾及 README 文件写入暂存区
git add *.c
git add README

3.2 git status 命令查看文件变更记录

git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。git status -s 命令 通过 -s 参数来获得简短的输出结果:

$ git status -s
A  README
A  hello.c

3.3 git commit 命令提交更新数据到本地仓库

git commit 命令暂存区内容添加到本地仓库中。

git commit -m '提交注释'
  • 注: 在 Linux 系统中,commit 信息使用单引号 ',Windows 系统,commit 信息使用双引号 "。
git commit -m "第一次版本提交"
[master (root-commit) d32cf1f] 第一次版本提交
 2 files changed, 4 insertions(+)
 create mode 100644 README
 create mode 100644 hello.php

现在我们已经记录了快照。如果我们再执行 git status:

$ git status
# On branch master
nothing to commit (working directory clean)

以上输出说明我们在最近一次提交之后,没有做任何改动,是一个 “working directory clean”,翻译过来就是干净的工作目录。

如果你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。 如果 Git 在你对它的配置中找不到相关信息,默认会打开 vim。屏幕会像这样:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   hello.php
#
~
~
".git/COMMIT_EDITMSG" 9L, 257C

3.4 提交更新数据

git commit -a 命令提交更新数据。此命令相等于 git addgit commit 的合并。git commit -am "提交注释" 命令加上了注释参数。

  • -a 参数设置修改文件后不需要执行 git add 命令,直接来提交
  • 如果不用 -a 参数,则需要先执行 git add ./ 命令,再执行 git commit 命令。
git commit -am '修改 hello.php 文件'
[master 71ee2cb] 修改 hello.php 文件
 1 file changed, 1 insertion(+)

3.5 推送分支数据到远程服务器

# 一般当前如果不在该分支时,使用这种方式推送。
git push origin kongzi:kongzi

# 如果当前在 kongzi 分支下,也可以直接推送
git push

3.6 分支合并

一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用 git merge 命令将任何分支合并到当前分支中去:

$ git branch
* master
  newtest
$ ls
README        test.txt
$ git merge newtest
Updating 3e92c19..c1501a2
Fast-forward
 runoob.php | 0
 test.txt   | 1 -
 2 files changed, 1 deletion(-)
 create mode 100644 runoob.php
 delete mode 100644 test.txt
$ ls
README        runoob.php

以上实例中我们将 newtest 分支合并到主分支去,test.txt 文件被删除。

合并完后就可以删除分支:

$ git branch -d newtest
Deleted branch newtest (was c1501a2).

删除后, 就只剩下 master 分支了:

$ git branch
* master

3.7 合并冲突

合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。如果有合并冲突出现,我们就需要手动去修改它。

合并分支产生冲突:

我们将前一个分支合并到 master 分支,一个合并冲突就出现了。

$ git merge change_site
Auto-merging runoob.php
CONFLICT (content): Merge conflict in runoob.php
Automatic merge failed; fix conflicts and then commit the result.

$ cat runoob.php     # 打开文件,看到冲突内容
<?php
<<<<<<< HEAD
echo 1;
=======
echo 'runoob';
>>>>>>> change_site
?>

修改冲突内容

接下来我们需要手动去修改它。

$ vim runoob.php 
$ cat runoob.php
<?php
echo 1;
echo 'runoob';
?>
$ git diff
diff --cc runoob.php
index ac60739,b63d7d7..0000000
--- a/runoob.php
+++ b/runoob.php
@@@ -1,3 -1,3 +1,4 @@@
  <?php
 +echo 1;
+ echo 'runoob';
  ?>

** git add 标识冲突解决**

在 Git 中,我们可以用 git add 要告诉 Git 文件冲突已经解决

$ git status -s
UU runoob.php
$ git add runoob.php
$ git status -s
M  runoob.php
$ git commit
[master 88afe0e] Merge branch 'change_site'

现在我们成功解决了合并中的冲突,并提交了结果。

4、其他命令

# 删除工作区文件,并且将这次删除放入暂存区
git rm [file1] [file2] ...

# 停止追踪指定文件,但该文件会保留在工作区
git rm --cached [file]

# 改名文件,并且将这个改名放入暂存区
git mv [file-original] [file-renamed]

# 对最近一次commit的进行修改
git commit -a -amend

# 选择一个 commit,合并进当前分支
$ git cherry-pick [commit]

# commit之后,如果想撤销最近一次提交(即退回到上一次版本)并本地保留代码
git reset HEAD^

# 合并分支:(merge from) 
git checkout master
git merge mybranch (merge from mybranch)

# 删除分支
git branch -d mybranch

# 强制删除分支
git branch -D mybranch

# 查看各个分支最后一次提交
git branch -v

# 查看哪些分支合并入当前分支
git branch --merged

# 查看哪些分支未合并入当前分支
git branch --no-merged

# 更新远程库到本地
git fetch origin

# 推送分支
git push origin mybranch

# 取远程分支合并到本地
git merge origin/mybranch

# 取远程分支并分化一个新分支
git checkout -b mybranch origin/mybranch

# 删除远程分支
git push origin :mybranch

# 更新某分支上的内容到当前分支
git checkout mybranch
git rebase master (rebase from master)

举例: $ git checkout server
$ git rebase –onto master server client
$ git checkout master
$ git merge client (fostforward)
$ git rebase master server (checkout sever)
$ git merge server
$ git branch -d client
$ git branch -d server
1

评论区