Git 和 GitHub 学习指南本地 Git 配置、基础命令、GitHub 上传流程、企业开发中 Git 的使用流程、以及如何将代码部署到生产服务器
Windows 上 Git 安装与配置
-
下载安装:访问 Git 官方网站下载适用于 Windows 的安装程序。运行安装包时会出现许可协议、安装目录、组件选择等界面(如下图)。在“Select Components”页面建议勾选 Git Bash Here 等选项,以便在资源管理器中右键快速启动 Git Bash【69†】。
安装完成后,可在「开始菜单」或桌面(如果勾选)找到 Git Bash。打开 Git Bash 后,输入git --version
可验证安装是否成功。 -
配置全局用户名和邮箱:安装完成后,首先配置 Git 的身份信息,这些信息会记录在每次提交中。在 Git Bash 中运行:
git config --global user.name "你的名字" git config --global user.email yourEmail@example.com
此命令会将用户名和邮箱写入
~/.gitconfig
(Windows 通常为C:\Users\用户名\.gitconfig
)。以后新建的仓库默认都会使用这个身份信息,除非为某个项目单独重写。 -
生成并配置 SSH 密钥:为了安全地连接远程仓库(如 GitHub),推荐使用 SSH 认证。启动 Git Bash,运行:
ssh-keygen -t rsa -b 4096 -C "你的邮箱"
按提示一路回车,新生成的密钥文件默认位于
~/.ssh/id_rsa
(私钥)和~/.ssh/id_rsa.pub
(公钥)。然后运行ssh-agent
并添加私钥:eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa
将公钥内容复制到你的 GitHub 账户(GitHub 网站 → Settings → SSH keys)中,这样就可以通过 SSH 方式访问 GitHub 了。SSH 密钥用于安全认证,使得 Git 可以在推送或拉取代码时使用密钥而非传统密码。
-
测试 SSH 连接:在 Git Bash 中运行:
ssh -T git@github.com
如果提示
Hi username! You've successfully authenticated...
表示已成功连接 GitHub。若出现错误,检查密钥是否正确添加,或是否通过ssh-add
加载了私钥。
Git 基础命令教程
Git 提供了一系列命令用于仓库管理与日常开发。下面列出常用命令及其作用和示例:
-
git init
:在当前目录初始化一个新的 Git 仓库。如果想把一个已有项目纳入版本控制,就在该项目根目录下运行:git init
这会创建一个隐藏的
.git
文件夹,表示此目录已被 Git 管理。 -
git clone <仓库地址>
:从远程仓库复制(克隆)到本地新目录。比如要获取 GitHub 上的项目:git clone git@github.com:用户名/仓库名.git
克隆操作会在本地创建一个与远程仓库相同的副本,通常这是开发者获取项目代码的最常用方式。
-
git add <文件>
:将工作目录中的修改添加到暂存区。比如添加当前目录下所有文件:git add .
该命令会把指定文件的当前版本记录到暂存区,等待提交到仓库中。常用
.
表示所有文件,也可以指定具体文件或目录。 -
git status
:查看工作目录状态,包括已修改、已暂存但未提交的文件等:git status
运行后会显示哪些文件已被修改但未加入暂存区、哪些文件已暂存待提交等信息。通过
git status
可以确认当前仓库状态。 -
git commit -m "提交信息"
:将暂存区的内容作为一个新快照提交到仓库历史。git commit -m "实现了用户登录功能"
每次提交都会生成一个唯一的提交记录,包含开发者信息、时间和提交说明。
git add
加git commit
构成了 Git 最基本的工作流。 -
git log
:查看提交历史:git log
它列出仓库中所有提交的历史记录,包括提交 ID、作者、日期和提交信息。可以加
--oneline
、--graph
等选项查看更简洁或图形化的日志。 -
git branch <分支名>
:创建新分支。git branch feature-x
该命令会创建一个名为
feature-x
的新分支,其实是开发一条并行的提交历史线。然后可以运行git checkout feature-x
切换到该分支进行开发。使用分支可以实现并行开发,各分支之间相互隔离,不会干扰主干。 -
git merge <分支>
:将指定分支的修改合并到当前分支。假设在main
分支上执行:git merge feature-x
Git 会把
feature-x
分支的改动合并到main
分支中。合并是 Git 中的一个强大功能,用于将不同分支的开发成果整合在一起。合并后可能会出现冲突,需要手工解决(参见下文)。 -
git pull
:自动化地从远程获取并合并代码。执行:git pull origin main
该命令会先从远程仓库(如
origin
)拉取指定分支(如main
)的更新,然后立即合并到当前分支,就像git fetch
加git merge
的简写。通常在开始工作前运行git pull
,确保本地与远程同步。 -
git push
:将本地分支的提交推送到远程仓库。一般格式为:git push origin main
其中
origin
是远程仓库别名,main
是分支名。此操作会把本地main
分支的最新提交上传到 GitHub 等远程仓库。通常首次推送还需要加上-u
参数,如git push -u origin main
,以将远程分支设置为上游分支。 -
git stash
:暂存当前工作目录未提交的修改,以便切换分支或临时处理其他事务。使用方法:git stash
该命令会把所有未提交的改动(包括已暂存和未暂存的)都保存到一个栈中,并恢复工作目录到干净状态。之后可以使用
git stash pop
恢复这些改动。这对中断当前工作去处理其他紧急任务非常有用。
将本地项目上传到 GitHub
-
在本地项目根目录执行:
git init git add . git commit -m "首次提交"
这会把当前项目初始化成 Git 仓库,并将所有文件提交为第一个版本。
-
在 GitHub 网站上新建一个空的仓库(Repository),记录下仓库的 SSH 地址(如
git@github.com:用户名/仓库名.git
)。 -
本地添加远程仓库地址并推送:
git remote add origin git@github.com:用户名/仓库名.git git branch -M main # 将本地默认分支名改为 main(可选) git push -u origin main
git remote add origin <URL>
用于添加远程仓库别名origin
。git branch -M main
将当前分支重命名为main
(如果默认是master
)以与 GitHub 上的默认分支名一致。git push -u origin main
将本地的main
分支推送到远程的main
分支。执行后,GitHub 上就会出现项目的文件列表。
-
此后每次更新代码后,使用
git add
、git commit
提交,再运行git push origin main
将改动同步到 GitHub。第一次 push 后已经指定了上游分支,可以直接使用git push
。
企业级开发中的 Git 协作流程
-
功能分支工作流:团队通常采用 Feature Branch(功能分支)工作流,即新功能在单独的分支(如
feature/login
)上开发,完成后通过 Pull Request 合并到主干(main
)。这样可以确保主干始终保持可运行状态,同时多个开发者可以并行工作而互不干扰。下图示意了一个典型的功能分支流程:开发者从主干或开发分支切出新分支,完成后合并回主干。 -
Gitflow 工作流:对于发布周期较长或版本管理严格的项目,可采用 Gitflow 分支模型。Gitflow 在
main
(发布)和develop
(开发)两个长期分支基础上,创建更多短期分支:每个功能新建feature/*
分支从develop
分出来,开发完成后合并回develop
;发布时从develop
分出release/*
分支进行最终测试,再合并到main
并打标签;生产环境发现问题时从main
分出hotfix/*
分支修复后再合并回main
和develop
。Gitflow 明确了各类分支的职责,适合需要严格版本控制的大型项目。 -
多人协作与分支管理:在团队协作时,应统一分支命名规范(如
feature/功能名
、bugfix/编号
等),并定期同步主干变更。每位开发者都从远程仓库克隆项目后创建本地分支进行开发。使用git pull
保持与主干一致,避免分支差异过大导致冲突。 -
代码评审(Pull Request):大多数团队通过 GitHub、GitLab 或 Bitbucket 等平台发起 Pull Request(拉取请求) 来审查代码。在 Pull Request 中,开发者可以邀请同事对自己的改动进行 review,讨论并提出改进意见,再合并到主干。审核时可以查看改动的 diff、运行自动化测试状态等,确保代码质量。正如知名经验所述,“Pull requests 提供了一种从同事那里请求代码审查的方法,并检查最近一次提交的构建状态”。
-
冲突解决:合并分支时可能遇到 冲突,即不同分支在同一文件同一位置做了不同修改。Git 无法自动合并此类冲突,需要人工介入。通常的做法是打开冲突文件,手动编辑保留正确的代码,删除冲突标记,然后使用
git add
标记冲突已解决,再执行git commit
完成合并。在解决冲突前,也可以通过git merge --abort
放弃此次合并,或用git checkout --ours/--theirs <file>
临时选择某一方版本。及时与团队成员沟通,避免频繁冲突,尽量在合并前拉取最新代码减少冲突发生几率。
从 Windows 部署代码到 Linux 服务器
在企业环境下,常需将代码从开发机部署到远程 Linux 服务器。常见方式包括使用 SSH 进行文件传输或直接在服务器上拉取代码:
-
使用 SCP 复制文件:
scp
命令利用 SSH 协议安全地复制文件。例如在 Git Bash 或 PowerShell 中运行:scp -r C:\path\to\project user@server.example.com:/var/www/project
其中
-r
表示递归复制整个目录。该命令会要求输入服务器密码,或使用已有的 SSH 密钥免密码登录。SCP 适用于一次性快速复制整个项目目录。 -
使用 Rsync 同步文件:
rsync
是一个高效的远程同步工具,只传输改变的文件部分,适合频繁更新时使用。例如:rsync -avz -e "ssh -p 22" /c/path/to/project/ user@server.example.com:/var/www/project/
选项中
-a
表示归档模式保留权限等,-v
显示详细过程,-z
启用压缩传输。-e
指定使用 ssh。rsync
仅传输修改过的内容,效率更高。在 Windows 上可以通过 Git Bash 或 WSL 安装并使用rsync
。 -
在服务器上直接克隆/更新仓库:如果服务器可以访问 Git 代码托管平台,也可以在服务器上执行
git clone
或git pull
。例如:ssh user@server.example.com cd /var/www git clone git@github.com:用户名/仓库名.git # 之后如果需要更新,进入项目目录运行: git pull origin main
这种方式需要服务器安装好 Git,并确保服务器的 SSH 公钥已被 GitHub 授权。优点是只传输代码改动,不需要每次手工复制整个项目。
注意事项与提示:
- 在 Windows 上使用
scp
或rsync
时,需要在系统中安装 OpenSSH(Windows 10/11 通常已内置),或使用 Git Bash 等工具。 - 传输前最好先确认服务器目标目录存在并有正确权限。
- 在首次使用 Git 方式部署时,可能需要先配置服务器端的 SSH key 或运行
ssh-keygen
。 - 无论哪种方式,保持文件权限和依赖安装一致很重要,可在服务器上用脚本处理部署后的编译、重启等操作。
参考资料:Git 官方文档、Atlassian 和 GitHub 教程提供了丰富示例和说明。