在这里首先列举一些git用法的基础命令:
1.git init(创建仓库)
2.git status(查看仓库的状态)
3.git diff 文件名 (这次相较上次修改了哪些内容)
4.git add 文件名 (将添加的文件放到暂存区中)
5.git commit -m ‘内容’(将暂存区内容提交到仓库区中)
6.git push [地址] master 提交代码到github上。
7.git clone git地址(将远程仓库的代码克隆到本地)
8.git branch 查看当前分支
9.git checkout 切换分支
10.git branch -d [branch-name] 删除分支
11.git log 查看日志
git log –oneline 看到简洁版的日志
12.git reset 版本回退
对于git这一款源代码管理工具,在这里对git基础命令不再做详细的总结了。(总的来说就是本地上分为三个区:工作区、暂存区和仓库区),这里就是对一些稍微复杂一点的知识点做一点总结。
1:Git中复刻(fork)、分支(branch)和克隆(clone)之间有什么区别?
1 | 1)复刻(fork) 是对存储仓库(repository)进行的远程的、服务器端的拷贝,从源头上就有所区别。复刻实际上不是 Git 的范畴。它更像是个政治/社会概念。 |
2:我们在本地工程常会修改一些配置文件,这些文件不需要被提交,而我们又不想每次执行git status时都让这些文件显示出来,我们该如何操作?
1 | 在Git工作区的跟目录下创建一个特殊的.gitignore文件,然后把忽略的文件名编辑进去,Git就会自动忽略这些文件。 |
3:假如你现在的分支为main_dev,并在这个分支上修复了一个bug,但是在main_zh_test分支也发现了同样的一个bug,如果不用copy代码的方式你如何把main_dev修复这个bug提交的代码合并到main_zh_test分支上,请贴出你的git操作指令和指令的含义(合并时没有冲突)?
1 | 1)在main_dev上通过git log,查询到<commit id> |
[拓展git cherry-pick知识点]:git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit)。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了。
4:如何从 git 中删除文件,而不将其从文件系统中删除?
如果你在 git add 过程中误操作,你最终会添加不想提交的文件。但是,git rm 则会把你的文件从你暂存区(索引)和文件系统(工作树)中删除,这可能不是你想要的。1
21)git reset filename
2)echo filename >> .gitingore
5:git和svn的优缺点。
1.SVN优缺点
优点:
1、 管理方便,逻辑明确,符合一般人思维习惯。
2、 易于管理,集中式服务器更能保证安全性。
3、 代码一致性非常高。
4、 适合开发人数不多的项目开发。
缺点:
1、 服务器压力太大,数据库容量暴增。
2、 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。
3、 不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
2.Git优缺点
优点:
1、适合分布式开发,强调个体。
2、公共服务器压力和数据量都不会太大。
3、速度快、灵活。
4、任意两个开发者之间可以很容易的解决冲突。
5、离线工作。
缺点:
1、学习周期相对而言比较长。
2、不符合常规思维。
3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
6:说明新建一个GIT功能分支的步骤,提供每个步骤的指令,并对指令进行说明。
Git branch name 创建名字为name的branch
Git checkout xxx_dev 切换到名字为xxx_dev的分支
Git pull 从远程分支拉取代码到本地分支
Git checkout -b main_furture_xxx 创建并切换到main_furture_xxx
Git push origin main_furture_xxx 执行推送的操作,完成本地分支向远程分支的同步
7:git提交代码时候写错commit信息后,如何重新设置commit信息?
可以通过Git commit –amend 来对本次commit进行修改。
8:如何查看文件的提交历史和分支的提交历史。
使用git log查看文件提交历史
Git log filename
使用git log查看分支提交历史
Git log branch file
总的来说就是git log [文件名]来查看
9:“git pull”和“git fetch”之间有什么区别?
简单来说,git pull 是 git fetch + git merge。
当你使用 pull,Git 会试着自动为你完成工作。它是上下文(工作环境)敏感的,所以 Git 会把所有拉取的提交合并到你当前处理的分支中。pull 则是 自动合并提交而没有让你复查的过程。如果你没有细心管理你的分支,你可能会频繁遇到冲突。
当你 fetch,Git 会收集目标分支中的所有不存在的提交,并将这些提交存储到本地仓库中。但Git 不会把这些提交合并到当前分支中。这种处理逻辑在当你需要保持仓库更新,在更新文件时又希望处理可能中断的事情时,这将非常实用。而将提交合并到主分支中,则该使用 merge。
10: [重点]:Gitflow工作流程和演示Gitflow流程如何被用来管理一次产品发布
详细知识点: Reading
11:什么时候应使用 “git stash”?
git stash 命令把你未提交的修改(已暂存(staged)和未暂存的(unstaged))保存以供后续使用,以后就可以从工作副本中进行还原。
我们可以使用暂存(stash)的一个地方是,如果我们发现在上次提交中忘记了某些内容,并且已经开始在同一分支中处理下一个提交了1
2
3
4
5
6
7
8
9
10
11
12
13
14# Assume the latest commit was already done
# start working on the next patch, and discovered I was missing something
# stash away the current mess I made
$ git stash save
# some changes in the working dir
# and now add them to the last commit:
$ git add -u
$ git commit --ammend
# back to work!
$ git stash pop
12:Git 中 HEAD、工作树和索引之间的区别?
1)该工作树/工作目录/工作空间是你看到和编辑的(源)文件的目录树。
2)该索引/中转区(staging area)是个在 /.git/index,单一的、庞大的二进制文件,该文件列出了当前分支中所有文件的 SHA1 检验和、时间戳和文件名,它不是个带有文件副本的目录。
3)HEAD是当前检出分支的最后一次提交的引用/指针。
13:解释 Forking 工作流程的优点
Forking 工作流程 与其他流行的 Git 工作流程有着根本的区别。它不是用单个服务端仓库充当“中央”代码库,而是为每个开发者提供自己的服务端仓库。Forking 工作流程最常用于公共开源项目中。
Forking 工作流程的主要优点是可以汇集提交贡献,又无需每个开发者提交到一个中央仓库中,从而实现干净的项目历史记录。开发者可以推送(push)代码到自己的服务端仓库,而只有项目维护人员才能直接推送(push)代码到官方仓库中。
当开发者准备发布本地提交时,他们的提交会推送到自己的公共仓库中,而不是官方仓库。然后他们向主仓库提交请求拉取(pull request),这会告知项目维护人员有可以集成的更新。
14:是么时候使用“git rebase”代替“git merge”?
详细知识点: Reading