Git 常用操作Git是一个分布式版本控制系统它允许你跟踪文件和目录的历史更改。以下是一些常用的Git操作和它们的相关知识初始化仓库git init在当前目录创建一个新的 Git 仓库。初始化一个 README 文件这里讲述以 Git 命令来初始化README文件touchREADME.mdecho# Project TitleREADME.mdgitaddREADME.mdgitcommit-mInitialize README file配置git config --global user.name [name]设置全局用户名。git config --global user.email [email address]设置全局邮箱。添加文件git add file将指定文件添加到暂存区。git add .将当前目录的所有更改添加到暂存区。提交更改git commit -m message将暂存区的文件提交到仓库并附上提交信息。查看状态git status查看当前文件的状态哪些文件被修改了哪些文件在暂存区。查看提交历史git log查看提交历史记录。git log --oneline以简化的方式查看提交历史。分支操作git branch列出所有分支。git branch name创建一个新分支。git checkout name切换到指定分支。git checkout -b name创建新分支并切换到该分支。合并分支git merge branch将指定分支合并到当前分支。撤销操作git reset file将文件从暂存区撤回到工作区相当于--mixed默认行为。git reset --soft commit回退到指定提交但保留暂存区和工作区的修改。git reset --mixed commit回退到指定提交保留工作区修改但清空暂存区默认行为。git reset --hard commit回退到指定提交彻底丢弃暂存区和工作区的所有修改不可恢复慎用。git revert commit撤销某次提交创建一个新的提交来抵消之前的提交不改写历史安全。commit是要撤销的提交的哈希值。reset vs revertreset是回退把 HEAD 指针移到之前的提交会改写历史已推送的提交慎用revert是反向操作创建一个新提交来撤销旧提交不改写历史已推送的提交推荐用这个远程仓库操作基本操作git clone repository克隆远程仓库到本地。repository可以是远程仓库的 URL。git clone repository directory将远程仓库克隆到指定的本地目录。git clone --recurse-submodules repository克隆含子模块的仓库同时拉取所有子模块。git remote add name url添加远程仓库。git remote remove name删除远程仓库关联。git remote rename 旧名称 新名称重命名远程仓库。git remote set-url name 新url修改远程仓库地址。git remote -v查看所有远程仓库地址-v表示显示 URL。git push remote branch将本地分支的更改推送到远程仓库。git pull remote branch从远程仓库拉取分支的更改并合并到本地。git fetch remote从远程仓库拉取最新信息但不合并比pull更安全可以先查看再决定是否合并。多远程仓库管理Fork 工作流当你 Fork 一个开源项目进行二开时通常需要配置两个远程仓库# origin 指向你的 fork有推送权限gitremoteaddorigin https://gitee.com/你的用户名/项目.git# upstream 指向原仓库只有拉取权限用于同步上游更新gitremoteaddupstream https://gitee.com/原作者/项目.git# 查看所有远程仓库gitremote-v详细的 Fork 工作流和上游同步流程参见 Fork 工作流与上游同步。强制推送当你在本地修改了已推送的提交历史如git commit --amend、git rebase、git reset --hard需要强制推送到远程# --force强制推送无论远程是否有他人的新提交都会覆盖危险gitpush--forceorigin分支名# --force-with-lease安全的强制推送推荐# 如果远程分支有你本地未同步的新提交会拒绝推送避免覆盖他人工作gitpush --force-with-lease origin分支名始终优先使用--force-with-lease而非--force。前者会检查远程分支是否有你未拉取的新提交避免意外覆盖他人的工作。解决冲突当合并时出现冲突需要手动解决冲突后使用git add resolved-file添加解决后的文件然后git commit提交。标签操作git tag tagname创建一个标签。git push remote tagname推送标签到远程仓库。查看差异git diff查看工作区和暂存区的差异。git diff branch查看当前分支和指定分支的差异。编辑已经提交的 commit情况一修改最近一次的提交如果你只是想修改刚刚提交的 commit 信息或者想追加/修改刚刚提交的文件使用git commit --amend即可。1. 仅修改提交信息Commit Message方法A推荐直接在终端输入git commit --amend会进入默认编辑器如 Vim 或 VSCode修改完保存退出即可。方法B快捷如果你只想快速改个文案可以直接使用一行命令gitcommit--amend-m这里填写你新的提交信息2. 修改提交的文件或代码内容如果你发现上次提交漏了文件或者代码有笔误第一步正常修改你的代码然后使用git add .将修改后的文件重新加入暂存区。第二步执行git commit --amend可以加--no-edit保持原提交信息不变。Git 会将暂存区的新内容合并到上一次的提交中替换掉旧的提交。3. 同步到远程如果该提交之前已经推送过修改完成后需要强制推送gitpush-forigin你的分支名情况二修改历史中的某次提交交互式变基如果你需要修改的不是最后一次而是更早之前的某次提交需要使用交互式变基Interactive Rebase。假设你的提交历史是A - B - C - D你现在想修改中间的C提交1. 启动交互式变基你需要回到目标提交的上一个节点。可以使用git log查看提交哈希找到C的上一个提交B的哈希值。然后执行gitrebase-iB提交的哈希值# 或者如果你想修改最近3次提交中的某一次可以直接写gitrebase-iHEAD~32. 将pick改为edit执行后会打开一个编辑器列出从B之后的提交列表。找到你想修改的C提交那一行将行首的pick改为edit或简写e然后保存并退出。3. 修改该次提交此时 Git 会暂停变基过程并停留在C提交的状态。修改代码或文件。执行git add .暂存修改。执行git commit --amend修改该次提交的说明或内容。4. 完成变基并推送修改完成后执行以下命令让 Git 继续完成剩下的变基操作gitrebase--continue最后同样需要使用git push -f强制推送到远程仓库。操作失误兜底操作如果在修改过程中改乱了或者不想改了可以执行以下命令一键将本地分支回退到和远程仓库一模一样的状态注意这会丢失你本地未推送的所有修改gitreset--hardorigin/dev你的分支名# 示例gitreset--hardorigin/dev