您现在的位置是:首页 >学无止境 >Git常用命令remote和branch和checkout网站首页学无止境

Git常用命令remote和branch和checkout

zsx_yiyiyi 2024-06-23 12:01:02
简介Git常用命令remote和branch和checkout

Git常用命令remote和branch和checkout

1、remote

用于在远程仓库的操作。

# 显示所有远程仓库
$ git remote
# 此命令可显示更详细信息
$ git remote -v
# 例子
$ git remote
origin

$ git remote -v
origin  https://gitee.com/zsx242030/um.git (fetch)
origin  https://gitee.com/zsx242030/um.git (push)
# 显示某个远程仓库的信息
$ git remote show remote
# 例子
$ git remote show origin
* remote origin
  Fetch URL: https://gitee.com/zsx242030/um.git
  Push  URL: https://gitee.com/zsx242030/um.git
  HEAD branch: master
  Remote branches:
    branch1  tracked
    branch2  tracked
    branch_a tracked
    branch_b tracked
    branch_c tracked
    develop  tracked
    master   tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)
# 增加一个新的远程仓库,并命名
# 通过该命令将本地的代码库连接到远程服务器
$ git remote add [shortname] [url]
$ git remote add master https://gitee.com/zsx242030/um.git
$ git remote -v
master  https://gitee.com/zsx242030/um.git (fetch)
master  https://gitee.com/zsx242030/um.git (push)
origin  https://gitee.com/zsx242030/um.git (fetch)
origin  https://gitee.com/zsx242030/um.git (push)
# 删除远程仓库的关联
$ git remote rm [shortname]
$ git remote rm master
$ git remote -v
origin  https://gitee.com/zsx242030/um.git (fetch)
origin  https://gitee.com/zsx242030/um.git (push)
# 设置远程仓库的关联
$ git remote set-url origin <newurl>

2、branch

用于列出创建或删除分支。

2.1 创建分支

# 新建一个分支,但依然停留在当前分支
# 在当前分支下新建一个分支,新分支会复制当前分支的内容
# 注意:如果当前分支有修改,但是没有提交到仓库,此时修改的内容是不会被复制到新分支的
$ git branch branch-name
# 新建一个分支,指向指定commit
$ git branch branch-name commit
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track branch-name remote-branch
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream branch-name remote-branch

2.2 查看分支

# 显示当前代码库中所有的本地分支
$ git branch 
# 或者是
$ git branch -l
* branch_a
  master
# 列出所有远程分支
$ git branch -r
  origin/HEAD -> origin/master
  origin/branch1
  origin/branch2
  origin/branch_a
  origin/branch_b
  origin/branch_c
  origin/develop
  origin/master
# 列出所有本地分支和远程分支
$ git branch -a
* branch_a
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branch1
  remotes/origin/branch2
  remotes/origin/branch_a
  remotes/origin/branch_b
  remotes/origin/branch_c
  remotes/origin/develop
  remotes/origin/master
# 查看所有分支并带上最新的提交信息
$ git branch -av
* branch_a                b9709d6 branch_a | update a.txt | add new.txt
  master                  40f466a develop | add test.txt
  remotes/origin/HEAD     -> origin/master
  remotes/origin/branch1  40f466a develop | add test.txt
  remotes/origin/branch2  40f466a develop | add test.txt
  remotes/origin/branch_a b9709d6 branch_a | update a.txt | add new.txt
  remotes/origin/branch_b b1786d3 branch_b | update a.txt | add new.txt
  remotes/origin/branch_c 9fb14a6 branch_c | update a.txt | delete e.txt
  remotes/origin/develop  40f466a develop | add test.txt
  remotes/origin/master   40f466a develop | add test.txt
# 查看本地分支对应的远程分支
$ git branch -vv
* branch_a b9709d6 [origin/branch_a] branch_a | update a.txt | add new.txt
  master   40f466a [origin/master] develop | add test.txt

2.3 删除分支

# 删除本地分支,会阻止删除包含未合并更改的分支
# 如果分支没有被合任然想要合并用大写-D
$ git branch -d branch-name
# 强制删除一个本地分支,即使包含未合并更改的分支
$ git branch -D branchname
# 删除远程分支
$ git branch -dr remote/branch

2.4 修改分支

# 修改当前分支名
$ git branch -m newbranchname
# 本地分支改名
$ git branch -m oldbranchname newbranchname

2.5 分支信息查看

# 显示包含提交50089的分支
$ git branch --contains 50089
# 显示所有已合并到当前分支的分支
$ git branch --merged
# 显示所有未合并到当前分支的分支
$ git branch --no-merged

2.6 多人协作

# 在本地创建和远程分支对应的分支,名称最好一致
$ git checkout -b 分支名 origin/分支名
# 建立本地分支和远程分支的关联
$ git branch --set-upstream-to=origin/分支名 分支名
# 先抓取远程的更新,如果有冲突,手动解决冲突
$ git pull
# 解决冲突后推送
$ git push origin 分支名

因此多人协作工作模式一般是这样的:

首先,可以试图用 git push origin branch-name 推送自己的修改,如果推送失败,则因为远程分支比你的本

地更新早,需要先用 git pull 试图合并。如果合并有冲突,则需要解决冲突,并在本地提交。再用 git push

origin branch-name 推送。

3、checkout

用于切换分支或恢复工作树文件。

3.1 新建和切换分支

# 切换分支(切换分支时,本地工作区,仓库都会相应切换到对应分支的内容)
$ git checkout branchname
# 新建一个分支,并切换到该分支
# 从当前分支创建新分支
$ git checkout -b branchname
# 基于master分支创建一个test分支,并切换到该分支
$ git checkout -b test master
# 新建一条空分支
$ git checkout --orphan emptyBranchName
# 切换到上一个分支
$ git checkout -
# 新建一个分支,指向某个tag
$ git checkout -b branch tag
# 从远程分支develop创建新本地分支devel并检出
$ git checkout -b devel origin/develop
# 检出远程分支origin/develop并创建本地跟踪分支
# 本地分支与远程分支同名
$ git checkout --track origin/develop

3.2 恢复工作树文件

# 恢复暂存区的指定文件到工作区
$ git checkout file
# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout commit file
# 恢复暂存区的所有文件到工作区
$ git checkout .
# 回退最后一次的提交内容
# 可用于修改错误回退
# 此命令会使用HEAD中的最新内容替换掉你的工作目录中的文件,已添加到暂存区的改动以及新文件都不会受到影响
# --是用来表示后面接的是个路径,不加也可以
$ git checkout HEAD -- file
# 等价
$ git checkout -- file
# 回滚到最近的一次提交
# 如果修改某些文件后,没有提交到暂存区,此时的回滚是回滚到上一次提交
# 如果是已经将修改的文件提交到仓库了,这时再用这个命令回滚无效
$ git checkout HEAD
# 回滚到最近一次提交的上一个版本
$ git checkout HEAD^
# 回滚到最近一次提交的上2个版本
$ git checkout HEAD^^
# 切换到某个指定的commit版本
$ git checkout commit_id
# 切换指定tag
$ git checkout tag
# 检出版本v2.0
git checkout v2.0

在开发的正常阶段,HEAD 一般指向 master 或是其它的本地分支,但当你使用 git checkout 切换到指定的某一次

提交的时候,HEAD 就不再指向一个分支了,它直接指向一个提交,HEAD 就会处于 detached 状态(游离状态)。

$ git log
commit b9709d6e59125cc6d6de086527984cf1cab37c0f (HEAD -> branch_a, origin/branch_a)
Author: zsx242030 <2420309401@qq.com>
Date:   Thu May 18 20:36:54 2023 +0800

    branch_a | update a.txt | add new.txt

切换到某一次提交后,你可以查看文件,编译项目,运行测试,甚至编辑文件而不需要考虑是否会影响项目的当前

状态,你所做的一切都不会被保存到主栈的仓库中。当你想要回到主线继续开发时,使用 git checkout

branchName 回到项目初始的状态,这时候会提示你是否需要新建一条分支用于保留刚才的修改。

$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
        e.txt
Please commit your changes or stash them before you switch branches.
Aborting

哪怕你切换到了某一版本的提交,并且对它做了修改后,不小心提交到了暂存区,只要你切换回分支的时候,依然

会回到项目的初始状态。注意:你所做的修改,如果 commit 了,会被保存到那个版本中。切换完分支后,会提

示你是否要新建一个分支来保存刚才修改的内容。如果你刚才解决了一个 bug ,这时候可以新建一个临时分支,

然后你本地自己的开发主分支去合并它,合并完后删除临时分支。

3.3 恢复修改文件操作

对于恢复修改的文件,就是将文件从仓库中拉到本地工作区,即 仓库区 —> 暂存区 —> 工作区。

对于修改的文件有两种情况:

3.3.1 只是修改了文件,没有任何 git 操作

# 只是修改了文件,没有任何git操作,直接一个命令就可回
$ cat a.txt
branch_a

$ echo a > a.txt

$ git status
On branch branch_a
Your branch is up-to-date with 'origin/branch_a'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")

$ git checkout -- a.txt

$ git status
On branch branch_a
Your branch is up-to-date with 'origin/branch_a'.

nothing to commit, working tree clean

$ cat a.txt
branch_a

3.3.2 修改了文件,并提交到暂存区

# 修改之后,git add但没有git commit
$ cat a.txt
branch_a

$ echo a > a.txt

$ git add a.txt
warning: LF will be replaced by CRLF in a.txt.
The file will have its original line endings in your working directory.

$ git status
On branch branch_a
Your branch is up-to-date with 'origin/branch_a'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   a.txt

# 回退到当前版本
$ git reset HEAD
Unstaged changes after reset:
M       a.txt

$ git checkout -- a.txt

$ git status
On branch branch_a
Your branch is up-to-date with 'origin/branch_a'.

nothing to commit, working tree clean

$ cat a.txt
branch_a

3.3.3 修改了文件,并提交到仓库区

# 修改之后,git add和git commit -m
$ cat a.txt
branch_a

$ echo a > a.txt

$ git add a.txt
warning: LF will be replaced by CRLF in a.txt.
The file will have its original line endings in your working directory.

$ git commit -m "update a.txt"
[branch_a d0fe7e6] update a.txt
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git status
On branch branch_a
Your branch is ahead of 'origin/branch_a' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

# 回退到上一个版本
$ git reset HEAD^
Unstaged changes after reset:
M       a.txt

$ git checkout -- a.txt

$ git status
On branch branch_a
Your branch is up-to-date with 'origin/branch_a'.

nothing to commit, working tree clean

$ cat a.txt
branch_a
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。