Git入门
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
配置用户信息
git config --list # 查看当前用户信息
git config --global user.name "Your Name" # 配置姓名,--global 配置所有项目仓库的默认信息
git config --global user.emai mail@163.com # 配置邮箱
新建本地仓库
git init # 在当前目录新建一个Git仓库,会有一个 .git文件
git init dirName # 在指定目录新建一个Git仓库,指定目录下会有一个 .git文件
本地仓库与远程仓库关联
git clone remoteUrl # 直接克隆远程仓库
git remote -v # 查看与当前仓库关联的远程仓库信息,通常最开始是空的
git remote add origin remoteUrl # 将当前本地仓库与远程仓库关联,origin 为你给远程仓库的命名
git remote remove origin # 删除命名为origin的远程仓库
git remote rename oldName newName # 将已配置的仓远程库更名
拉取和上传代码
拉取和上传代码时注意仓库名和分支名的匹配
push代码之前要先commit
git push <远程仓库名> <本地分支>:<远程分支>
git push origin branchName # 指定远程仓库与分支的做法
git push --set-upstream origin branchName # 只需设置upstream,以后就默认这个上传仓库和分支
git pull <远程仓库名> <远程分支名>:<本地分支名>
# push流程
git status # 查看文件变更情况
git add . # 将当前文件夹下所有发生变更的文件上传到暂存区
git commit -m '提交时注明一些信息,主要是说明此次Commit针对什么'
git push
分支管理
git branch -av # 查看本地和远程仓库的分支情况
git branch newBranch # 新建分支, !!!注意,仓库在init后需要一次提交才能进行分支相关的操作
git checkout branchName # 切换分支
git branch -d branchName # 删除本地分支
在本地新建和删除远程分支
# 在本地新建远程分支
# 创建一个新本地分支
git checkout -b newLocalBranch
# 将新建的本地分支Push到远程仓库
git push origin(remote repository) newLocalBranch:remoteBranch
# 在本地删除远程分支
# 删除远程分支:Push一个空分支到远程仓库
git push origin :remoteBranch
分支合并
Merge
Rebaese
merge和rebase的比较
在开发社区里,有许多关于 merge 与 rebase 的讨论。以下是关于 rebase 的优缺点:
优点:
- Rebase 使你的提交树变得很干净, 所有的提交都在一条线上
缺点:
- Rebase 修改了提交树的历史
比如, 提交 C1 可以被 rebase 到 C3 之后。这看起来 C1 中的工作是在 C3 之后进行的,但实际上是在 C3 之前。
一些开发人员喜欢保留提交历史,因此更偏爱 merge。而其他人(比如我自己)可能更喜欢干净的提交树,于是偏爱 rebase。仁者见仁,智者见智。 😀
撤销操作
git revert/reset HEAD # 撤销上一次提交
git revert/reset HEAD^ # 撤销上上次提交
git revert/reset HEAD~n # 撤销上n(n >= 1)次提交
git revert 和 git reset的区别:
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
1、在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
2、git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。3、当要撤销远程仓库时,尽量使用revert,保证其他人不会受你的撤销操作影响。
reset: git reset HEAD~1
revert: git revert HEAD~1