这是一篇入门级使用指南,更多详细的请参考 Git 官网电子书。
在这里将列举一些常用命令和场景解决方案,欢迎大家补充学习。
在软件开发过程,每天都会产生新的代码,代码合并的过程中可能会出现如下问题:
因此,我们希望有一种机制,能够帮助我们:
一个标准的版本控制系统 Version Control System (VCS),通常需要有以下功能:
版本控制系统发展至今有几种不同的模式:
Local VCS
本地使用 复制/粘贴
的方式进行管理,缺点是无法协同开发
Centralized VCS (Lock,悲观锁)
中央集中式版本控制系统团队共用仓库,当某人需要编辑文件时,进行锁定,以免其他人同时编辑时造成冲突。缺点是虽然避免了冲突,但不是很方便。其他人需要排队才能编辑文件,如果有人编辑了很久或是忘记解锁就会造成其他人长时间等待的情况。
Centralized VCS (Merge,乐观锁)
中央集中式版本控制系统团队共用仓库,不采用悲观锁方式来避免冲突,而是事后发现如果别人也修改相同文件(冲突),再进行手动修改解决。有很多 VCS 属于这种类型,如:CVS,Subversion,Perforce 等
中央集中式版本控制系统的共同问题是,做任何操作都需要和服务器同步,如果服务器宕机则会造成无法继续工作的窘迫。
Distributed VCS
分布式版本控制系统,本地也拥有完整的代码仓库,就不会出现上述集中式管理的问题,即使没有网络,依然可以 commit
和看 log
,也无需担心服务器同步问题。如:Git,Mercurial,Bazaar 等就属于分布式版本控制系统。缺点是功能比较复杂,上手需要一定的学习时间。
Git 官网下载地址:Git 版本管理工具
客户端推荐:SourceTree,软件安装跳过注册,请参考这里
一图胜千言
推荐一个不错的可视化工具:Git Cheat Sheet
设置提交者姓名
$ git config --global user.name "John Doe"
设置提交者邮箱
$ git config --global user.email johndoe@example.com
查看配置列表
$ git config --list
在指定目录创建仓库,如果没有指定目录名将在当前目录创建仓库
$ git init [目录名]
# 当前文件夹初始化
$ git init .
# 指定目录
$ git init frank
从指定地址克隆仓库,若不指定目录名
将默认创建与远程同名目录
$ git clone <远程仓库地址> [目录名]
# 不想创建目录,目录名为 . ,直接加在内容到当前目录下
$ git clone https://github.com/frank-lam/2019_campus_apply.git .
将文件或目录中已修改的代码添加追暂存区
$ git add <目录名|文件名>
提交暂存区内容
$ git commit -m "<注释>"
查看仓库状态
$ git status
比对当前内容和暂存区内容
$ git diff
比对当前内容和最近一次提交
$ git diff HEAD
比对当前内容和倒数第二次提交
$ git diff HEAD^
比对最近两次提交
$ git diff HEAD^ HEAD
查看提交历史
$ git log --oneline
打印为单行log
$ git log --oneline
打印所有记录(忽略HEAD的位置)
$ git log --all
打印示意图(忽略HEAD的位置)
$ git log --graph
查看所有分支
$ git branch
有分支:创建分支,无分支:列出所有分支
$ git branch [分支]
切换至分支
$ git checkout <分支>
创建并切换至分支分支
$ git checkout -b <分支>
将分支与当前分支合并
$ git merge <分支>
拉取远程仓库
$ git pull
推送至远程仓库
$ git push <远程仓库> <分支>
新增远程仓库 origin
$ git remote add origin https://xxx.git
修改远程仓库 origin
$ git remote set-url origin https://xxx.git
Git提示:up-to-date,但未得到删除的文件
原因:当前本地库处于另一个分支中,需将本分支发 Head 重置至 master
$ git checkout master
$ git reset --hard
git 强行 pull 并覆盖本地文件
$ git fetch --all
$ git reset --hard origin/master
$ git pull
应用场景:
总的来说,git stash 命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash 中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash 作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。