当前位置:   article > 正文

Git命令集_git拉取分支

git拉取分支

1. 拉取远程分支到本地

该方式拉取的分支,都是远程代码仓中的分支。

1.1. 克隆方式(方式一)

该方式会将所有分支信息都拉下来,然后通过切换分支操作,直接切换到相应分支。
(1)项目克隆到本地

git clone <克隆地址(如https://github.com/xxx/xxx.git)>
# 克隆时的远程主机名默认为origin,可通过参数-o对远程主机重新命名
git clone -o jQuery https://github.com/jquery/jquery.git
  • 1
  • 2
  • 3

(2)切换分支

git checkout <分支名>
  • 1

1.2. 拉取方式(方式二)

该方式会将指定分支信息都拉下来,远程仓库中的其他分支信息不会出现在本地仓库。
(1)打开git bash命令窗

(2)创建本地代码仓名

mkdir MyProject
  • 1

(3)进入本地仓文件夹MyProject,并初始化

cd <MyProject>
git init
  • 1
  • 2

(4)建立与远程主机origin的连接

git remote add origin <克隆地址(如https://github.com/xxx/xxx.git)>
  • 1

注意:Git 1.7.0后,可以使用Sparse Checkout(稀疏检出)模式实现。如果希望从Git的远程仓库里检出或拉取指定文件夹或部分文件出来,则先通过如下命令设置后再执行第(5)~(7)步:

# 设置Sparse Checkout稀疏检出模式,指定允许检出的文件夹或部分文件
git config core.sparsecheckout true
# 指定检出archive/config目录下的application.yaml
echo archive/config/application.yaml >> .git/info/sparse-checkout
# 也可以使用通配符,比如:archive*表示archive开头的所有目录;!archive表示不包含archive目录。
# 检出archive目录下所有文件夹和文件:echo archive >> .git/info/sparse-checkout
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(5)拉取远程分支到本地

git fetch <远程主机名> <分支名>
# git fetch origin master表示“取回origin主机的master分支”
  • 1
  • 2

注意:也可以通过命令get fetch origin <远程分支名称Branch_1>:<本地新建分支名称Branch_1_Loc>,直接拉取远程分支名称Branch_1并创建本地新分支远程分支名称Branch_1_Loc,则不用执行(6)和(7)。

(6)在本地创建分支Branch_1_Loc并切换到该分支(这里创建的Branch_1_Loc分支,远程代码仓不可现)

git checkout -b <本地分支名称(Branch_1_Loc)> <远程分支名称(origin/Branch_1)>
  • 1

注意:如果想直接拉取远程分支Branch_1内容,并合并到本地分支Branch_loc_tmp,可采用如下命令:

git checkout <本地分支名称(Branch_loc_tmp)>   #进入本地分支
git pull origin <远程分支名称(Branch_1)>      #拉取远程origin的分主机支合并到本地当前所在分支
  • 1
  • 2

这里,git pullgit fetch的差异,简单可以理解为git pull = git fetch + git merge,详细差异可参考链接

2. 基于本地已有分支创建本地分支

该方式创建的本地分支,只在本地可现,远程代码仓不可现。其他信息,请参考链接
(1)切换到某个分支(如Branch_x)

git checkout Branch_x
  • 1

(2)在该分支下创建分支(如Branch_x_loc1)

git checkout -b Branch_x_loc1
  • 1

注意:上述Branch_x_loc1即为根据Branch_x创建的。若要将新建Branch_x_loc1推送到远程代码仓,则执行如下命令:

git push origin Branch_x_loc1
  • 1

3. 文件状态与版本提交

3.1 文件状态

文件状态转换

(1)添加/删除跟踪状态
文件或目录一旦被跟踪,这一辈子都会在仓库中被跟踪。

# 添加跟踪
git add <文件名或目录>
# 删除跟踪
git rm <文件名或目录>           #删除跟踪状态及文件本身
git rm --cache <文件名或目录>   #仅删除跟踪状态,文件本身以未跟踪状态保存在本地
  • 1
  • 2
  • 3
  • 4
  • 5

(2)设置/取消缓存(暂存)状态

# 设置缓存状态
git add <文件名>
# 取消缓存状态
git reset HEAD <文件名>
  • 1
  • 2
  • 3
  • 4

(3)提交/撤回修改

# 提交修改
git commit -m '本次提交的注释信息'

# 方式一:撤回提交
# 1.参数:--soft,不删除工作空间commit时改动的内容。也即,只撤销git commit,不撤销git add。
git reset --soft HEAD~i # 若用HEAD^,则表示上一个版本

# 方式二:撤回提交
# 1.参数:--hard,删除工作空间commit时改动的内容。也即,撤销git commit,且撤销git add。
git reset --hard HEAD~i

# 注:上述的i=1...k,且最近一次提交编号为1。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

(4)查看文件在"工作区"和"暂存区"之间的具体差异

# 查看工作区和暂存区之间所有的文件差异
git diff 
# 查看具体某个文件 在工作区和暂存区之间的差异
git diff -- 文件名 
# 查看多个文件在工作区和暂存区之间的差异
git diff -- 文件名1 文件名2 文件名3 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

其他更多diff对比命令,请参考链接所述。

3.2 版本提交

网上图文资料,请参考链接。具体流程如下:

(1)查看当前状态

# 查看当前分支所有文件的状态
git status  
  • 1
  • 2

从当前状态中,可以看出所有更改项。

(2)添加本地缓存

添加需要提交的内容到本地Git缓存区。两种方式:

方式1:提交全部更改

git add .
  • 1

方式2:只提交file_i.xx文件的更改

git add <file_i.xx>
  • 1

(3)提交代码

git commit -m "更改说明" 
  • 1

(4)本地合并分支

取回远程主机某个分支的更新,再与本地的指定分支合并。

git pull <远程主机名> <远程分支名>:<本地分支名>  #拉取远程主机分支合并到指定本地分支
git pull <远程主机名(如origin)> <远程分支名>   #拉取远程主机分支合并到本地当前分支
  • 1
  • 2

该过程也可通过“5.更新(合并)分支”这一节所述方式实现。

(5)推送远程分支

把当前提交到git本地仓库的代码推送到远程主机的某个远程分之上。

git push <远程主机名> <本地分支名>:<远程分支名>  #推送本地分支到远程主机指定分支
git push <远程主机名(如origin)> <远程分支名>    #推送当前所在本地分支到远程主机指定分支
  • 1
  • 2

3.3 版本日志

git log命令主要用于查看Git版本演变历史(也就是提交历史),同时根据追加的参数和选项不同,也会有不同的展示效果。详细命令如下:

  • 不带参数
    • 如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者、提交日期、和提交说明。
    • 如果记录过多,则按上下键,Enter(向下显示一行),空格(显示下一页),来控制显示。
    • 按q键退出历史记录列表。
  • 常用显示参数
    • -p:按补丁格式显示每个更新的差异,比下一条–stat命令信息更全。
    • --stat:显示每次提交修改文件的统计信息,每个提交都列出了修改过的文件,以及其中添加和移除的行数,并在最后列出所有增减行数小计。
    • --shortstat:只显示–stat中最后的行数添加、修改、删除的统计。
    • --name-only:仅在提交信息后,显示已修改的文件清单。
    • --name-status:显示新增、修改、删除的文件清单。
    • --abbrev-commit:仅显示SHA-1校验和的前几个字符,而非所有的40个字符。
    • --relative-date:使用较短的相对时间,而不是完整格式显示日期(比如“2 weeks ago”)。
    • --graph:在日志旁以ASCII图形显示分支与合并历史。
    • --online:列表的形式查看历史版本记录,–pretty=oneline --abbrev-commit 合用的简写。
    • --pretty:使用其他格式显示历史提交信息。可用的选项包括oneline、short、full、fuller和 format(用来定义自己的格式)。

3.4 修改已push的commit内容

针对一次攒了多个本地提交的Commit,一把push到远程仓库,但是Committer发现Commit Message写得不太规范,需要全部修改好再push一遍的情况,请参考链接1链接2

4. 切换远程仓库地址

(1)查看远程仓库的地址

git remote -v
  • 1

(2)修改远程仓库地址

方式一:直接修改

git remote set-url <主机名> <远程仓库地址>
  • 1

方式一:删除再添加

  • 删除旧的远程仓库
git remote rm <主机名>
  • 1
  • 添加新的远程仓库地址
git remote add <主机名> <远程仓库地址>
  • 1

(3)其他远程仓库操作命令

# 命令列出所有远程主机
git remote
# 查看该主机的详细信息
git remote show <主机名>
# 添加远程主机
git remote add <主机名> <网址>
# 修改远程主机名
git remote rename <原主机名> <新主机名>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5. 更新(合并)分支

将主干分支(master)内容更新到其他分支,步骤如下:

(1)本地先切换到master分支

git checkout master
  • 1

(2)将master分支代码pull下来

git pull
  • 1

(3)切换到待更新分支

git checkout 待更新分支名(如my_branch)
  • 1

注意:如需在第(4)步中,将master强行合并到“待更新分支”,此处可使用git checkout -f 待更新分支名(如my_branch)。使用了-f命令后,后面的merger过程将不会有任何提醒。

(4)将master分支代码合并到待更新分支

# 1. merge方式
git merge master

# 2. rebase方式
git rebase master
  • 1
  • 2
  • 3
  • 4
  • 5

一般情况下,merge和rebase的使用条件如下:

  • merge
    在开发中,希望可以查看每个commit的详细信息时,采用git merge。例如,将自己分支合并到公共分支(如master),当遇到问题需要回溯时可以查看自己提交的commit信息。
  • rebase
    在开发中,不希望查看commit的详细信息时,采用git rebase。例如,在自己分支上工作或者将公共分支(如master)合并自己分支,后续无需查看自己提交的commit信息。
    merge和rebase的差异

(5)将merge后的代码push到待更新分支

git push origin 待更新分支名(如my_branch)
  • 1

6. Git其他操作

6.1. 查看所有分支

git branch -a
  • 1

6.2. 查看当前使用分支

git branch
  • 1

注意:结果列表中前面标*号的表示当前使用分支。

6.3.建立追踪关系

# 建立本地分支master与远程主机origin的分支next之间的追踪关系
git branch --set-upstream master origin/next
  • 1
  • 2

6.4. 切换分支

git checkout 分支名
  • 1

在切换分支时,若提示如下错误,则表明当前分支修改内容未提交。可通过commit提交、也可通过stash缓存后再行切换分支。

error: Your local changes to the following files would be overwritten by checkout:
        src/.../xxx.py
        src/.../.../yyy.py
Please commit your changes or stash them before you switch branches.
  • 1
  • 2
  • 3
  • 4

注:git stash命令
可将当前分支(如dev)未提交的修改(即工作区的修改和暂存区的修改)先暂时储藏起来,这样工作区干净了后,就可以切换切换到其他分支。在重新切换会dev分支后,通过git stash pop命令将之前储藏的修改取出来,继续进行功能开发。详细命令如下:

# 1.查看储藏记录列表。如:
#   stash@{index}: WIP on [分支名]: [最近一次的commitID] [最近一次的提交信息]
git stash list

# 2.储藏内容。即存储未提交的修改,stashMessage为当前储藏添加的备注信息。
git stash save 'stashMessage'

# 3.取出存储内容
#   方式1:取出不删除。取出指定index的储藏内容到工作区中,但不从储藏记录列表中删除。
git stash apply stash@{index} 
#   方式2:取出并删除。取出最近一次的储藏内容到工作区中,同时从储藏记录列表中删除。
git stash pop

# 3.删除存储内容。删除指定index的储藏内容。
git stash drop stash@{index}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

6.5. 删除分支

其他信息,请参考链接

# 1.删除本地分支
git branch -D <本地分支>
# 2.删除远程分支方式一(冒号必需带上)
git push origin :<远程分支>
#   删除远程分支方式二
git push origin --delete <远程分支>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

若要同时删除本地与远程分支,则同时执行上述两条命令。

6.6. 删除仓库中的文件目录或文件

git rm -r --cached FileName[or DirectoryName] #参数--cached,同时删除缓存
git commit -m 'delete'
git push
  • 1
  • 2
  • 3

6.7. 清除git版本控制信息

find . -name ".git" | xargs rm -rf
  • 1

参考链接

(1)Git与GitHub中文参考文档
(2)Git速查表
(3)Git基础与进阶
(4)git clone/push/pull/fetch命令详解

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/913390
推荐阅读
相关标签
  

闽ICP备14008679号