查看当前仓库的所有(本地)分支:
❯ git branch
dev
feature/1
feature/2
* main
release/260126
temp-v1.0
testing
这里的*标记的分支是当前生效的分支,即HEAD指针指向的分支。
可以使用-v查看每个分支最后一次提交记录:
❯ git branch -v
dev 20631fd hello3
feature/1 8b8dbd9 add school
feature/2 1061ba5 add classRoom
* main dfc886e [ahead 7] merged from feature/2
release/260126 b31900f hello3
temp-v1.0 624e587 add school
testing f030054 modify teacher
可以使用--merged查看已经合并到其它分支的分支:
❯ git branch --merged
feature/1
feature/2
* main
release/260126
这些分支已经被合并过了,所以可以安全地使用git branch -d删除分支。
对应的,可以使用--no-merged查看还没有合并过的分支:
❯ git branch --no-merged
dev
temp-v1.0
testing
没有合并果的分支不能使用git branch -d删除,如果要强行删除,可以使用git branch -D。
远程分支
查看可以使用的远程仓库列表:
❯ git remote
origin
远程仓库名称可以是任何名称,
origin并没有特殊含义,只不过通过git clone创建的本地仓库默认使用origin作为远程仓库名称。
查看远程仓库的详细内容:
❯ git remote show origin
* remote origin
Fetch URL: git@github.com:icexmoon/learn-git.git
Push URL: git@github.com:icexmoon/learn-git.git
HEAD branch: main
Remote branches:
dev tracked
main tracked
release/260126 tracked
Local branches configured for 'git pull':
dev merges with remote dev
main merges with remote main
release/260126 merges with remote release/260126
Local refs configured for 'git push':
dev pushes to dev (up to date)
main pushes to main (fast-forwardable)
release/260126 pushes to release/260126 (up to date)
被跟踪的远程分支存在一个本地的跟踪分支,跟踪分支使用<remote>/<branch>方式命名,比如:
❯ git branch -a
dev
feature/1
feature/2
* main
release/260126
temp-v1.0
testing
remotes/origin/HEAD -> origin/main
remotes/origin/dev
remotes/origin/main
remotes/origin/release/260126
这里的origin/dev、origin/main、origin/release/260126都是跟踪分支。
这里用main分支以及对应的跟踪分支和远程分支进行举例,说明它们的关系。如果刚从远程仓库拉取该分支,它们的状态如下:

每个分支是完全一致的,指向相同的提交记录。
如果本地分支和远程分支都追加了新的提交记录:

可以通过另一个本地仓库模拟其他人提交到远程仓库。
可以看到跟踪分支是落后于本地分支的:

并且因为没有从远程仓库同步,跟踪分支并没有反映远程仓库上的最新提交记录。
从远程仓库拉取 main 分支的最新提交记录:
❯ git fetch origin main
再次查看日志:

可以看到跟踪分支和本地分支分叉了。可以用下图表示:

当然,现在你需要合并分支并后再推送到远程仓库:
❯ git merge origin/main
❯ git push
当然,使用
git pull在拉取代码的同时进行合并会更为简单。通过 rebase 的方式合并的代码会让历史记录变成线性,更为优雅。
推送后的分支情况:

跟踪分支
通过 git clone 方式建立的本地仓库,git 会自动生成跟踪分支,并和本地分支关联。
查看本地分支和跟踪分支的关联情况:
❯ git branch -vv
dev 20631fd [origin/dev] hello3
feature/1 8b8dbd9 add school
feature/2 1061ba5 add classRoom
* main 81a4599 [origin/main] Merge remote-tracking branch 'origin/main'
release/260126 b31900f [origin/release/260126] hello3
temp-v1.0 624e587 add school
testing f030054 modify teacher
在本地创建的新分支需要手动关联:
❯ git branch tmp-main
❯ git checkout tmp-main
❯ git branch -u origin/main
这种操作很常见,因此 git 提供更方便的命令,在创建新分支的同时关联跟踪分支:
❯ git checkout -b tmp-main origin/main
branch 'tmp-main' set up to track 'origin/main'.
Switched to a new branch 'tmp-main'
删除远程分支
删除本地分支并不会影响远程分支:
❯ git branch -d release/260126
Deleted branch release/260126 (was b31900f).
如果需要将远程仓库上的分支也删除掉:
❯ git push origin --delete release/260126
To github.com:icexmoon/learn-git.git
- [deleted] release/260126
The End.

文章评论