[学习笔记] Git版本控制之Git进阶

# 学习 # · 2021-06-09

分支管理

1、分支:生成副本,避免影响开发主线。

2、分支细分:

(1)主分支(master):第一次向git仓库提交更新记录时自动产生的一个分支。

(2)开发分支(develop):作为开发的分支,基于master分支创建。

(3)功能分支(feature):作为开发。具体功能的分支基于开发分支创建。

3、分支命令:

(1)创建分支:git branch <branch-name>

(2)从当前所处的分支切换到其他分支:git checkout <branch-name>

(3)新建并切换到新建分支上:git checkout -b <branch-name>

(4)删除分支:git branch -d <branch-name>

(5)将当前分支与指定分支进行合并:git merge <branch-name>

(6)显示本地仓库的所有分支:git branch

(7)查看各个分支最后一个提交对象的信息:git branch -v

(8)查看哪些分支已经合并到当前分支:git branch --merged

(9)查看当前哪些分支还没有合并到当前分支:git branch --no-merged

(10)把远程分支合并到当前分支:git merge <remote-name>/<branch-name>。如果是单线的历史分支不存在任何需要解决的分歧,只是简单的将HEAD指针前移,所以这种合并过程可以称为快进(Fast forward),而如果是历史分支是分叉的,会以当前分叉的两个分支作为两个祖先,创建新的提交对象;如果在合并分支时,遇到合并冲突需要人工解决后,才能提交

(11)在远程分支的基础上创建新的本地分支:git checkout -b <branch-name> <remote-name>/<branch-name>

(12)从远程分支checkout出来的本地分支,称之为跟踪分支。在跟踪分支上向远程分支上推送内容:git push。该命令会自动判断应该向远程仓库中的哪个分支推送数据;在跟踪分支上合并远程分支:git pull

(13)将一个分支里提交的改变移到基底分支上重放一遍:git rebase <rebase-branch> <branch-name>,将特性分支server提交的改变在基底分支master上重演一遍;使用rebase操作最大的好处是像在单个分支上操作的,提交的修改历史也是一根线;如果想把基于一个特性分支上的另一个特性分支变基到其他分支上,可以使用--onto操作:git rebase --onto <rebase-branch> <feature branch> <sub-feature-branch>;使用rebase操作应该遵循的原则是:一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行rebase操作


本地仓库上的操作

1、查看本地仓库关联的远程仓库:git remote

2、在克隆完每个远程仓库后,远程仓库默认为origin,加上-v的参数后,会显示远程仓库的url地址

3、添加远程仓库,一般会取一个简短的别名:git remote add [remote-name] [url]

4、从远程仓库中抓取本地仓库中没有的更新:git fetch [remote-name],使用fetch只是将远端数据拉到本地仓库,并不自动合并到当前工作分支,只能人工合并。如果设置了某个分支关联到远程仓库的某个分支的话,可以使用git pull来拉去远程分支的数据,然后将远端分支自动合并到本地仓库中的当前分支;

5、将本地仓库某分支推送到远程仓库上:git push [remote-name] [branch-name]

6、将本地分支推送到远程仓库的不同名分支:git push <remote-name> <local-branch>:<remote-branch>

7、删除远程分支:git push [romote-name] :<remote-branch>

8、查看远程仓库的详细信息:git remote show origin

9、修改某个远程仓库在本地的简称:git remote rename [old-name] [new-name]

10、移除远程仓库:git remote rm [remote-name]


忽略文件.gitignore

1、一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。

# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt
如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/309/

评论