我使用Git几年了,至今还会碰上各种各样的新问题,实在不胜其烦
工具 gitk 可以查看和管理分支
- origin 远程服务器
- origin/master 远程分支
- master 本地分支
origin并不特别,就像分支名 master 在git中没有任何特殊意义一样.当执行git init时,master会作为初始分支的默认名字,因此使得master分支名被广泛使用。而origin是执行git clone时的默认服务器名称,当然可以通过指令git clone -o cat
,使得默认服务器名称为cat,而默认远程分支为cat/master
从远程分支check out一个本地分支,该本地分支被称为追踪分支(tracking branch),被追踪的分支被称为上游分支(upstream branch),追踪分支可以理解为是和远程分支有直接关联的本地分支. 如果我们在追踪分支时执行git pull,git会自动知道需要获取和merge的分支的服务器.
feat 分支
在Git 中,feat
分支指的是 ==feature 分支,也叫做功能分支==。它主要用于开发新的功能或特性,确保开发过程不会影响到主干代码的稳定性。
feat
分支是从主开发分支(如 develop
或 main
)派生出来的,用于隔离新功能的开发工作。这样做的好处是,多个开发者可以并行地在不同的 feat
分支上开发不同的功能,而互不干扰,提高了开发效率。
工作流程:
- 当需要开发一个新功能时,从主分支(比如
develop
)创建一个新的feat
分支。 - 在
feat
分支上进行代码开发和修改。 - 开发完成后,测试无误,将
feat
分支合并回主分支。 - 合并后,
feat
分支可以被删除,以保持仓库的整洁。
拉取远程指定分支
1 | git remote add origin project_url |
在本地创建分支develop并切换到该分支1
git checkout -b develop(本地分支名称) origin/develop (远程分支名称)
远程分支上的内容都拉取到本地1
2# develop 为远程分支名称
git pull origin develop (远程分支名称)
回到本地文件夹查看,已完成拉取远程某个分支到本地。拉去更新也是这个命令,如果是git pull
,可能会把所有分支的内容都拉下来,用时较长,没有必要。
提交到某分支
1 | git push origin 本地分支名:远程分支名 |
查看分支和合并
git branch -a
list both remote-tracking and local branches
git branch -vv
会列出所有的分支信息,包含追踪分支的关联关系
常见的情况是,我自己有一个分支me
,还要拉取另一个人的分支,两人共用部分文件,合并到分支master。在自己分支修改文件结束后,提交到自己的分支。然后切换到master分支,git checkout master
。由于不知道另一个人是否更新了代码,所以先执行git pull
更新一下,然后git merge me
,这就合并了我的分支,再git push origin master
。
有时会出现冲突,这是由于两人修改了同一个文件,冲突的提示:
1 | Auto-merging readme.txt |
git status
也可以告诉我们冲突的文件. 在冲突的文件里,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,只能自己手动修改,然后再提交。解决冲突的过程一直是在master
分支。 用带参数的git log
也可以看到分支的合并情况
将user分支合并到master分支
1 | # 当前是user分支 |
删除本地分支
git branch -d user
1 | user@user:~/dev_ws/$ git branch -d user |
submodule
一个工程包含一个module,两部分的分支可能是不同的。先把工程拉取下来后,看看隐藏文件.gitmodules
中的url和分支是否正确,此时的module部分应该还没有更新,使用下面的命令更新1
2git submodule init
git submodule update
本地文件修改后,执行git pull出现冲突
执行git pull
出现下面提示1
2Please commit your changes or stash them before you merge.
Aborting
这是因为本地修改了一些文件,但远程仓库已经有别人提交更新了,所以有冲突。一般不会直接commit本地的修改。
- 放弃本地修改的改法 (这种方法会丢弃本地修改的代码,而且不可找回!)
1 | git reset --hard |
将最新的主分支更新到个人分支
1 | # 当前在个人分支 |