1. 克隆远程仓库
git clone <远程仓库URL>
解析: 将指定 URL 的远程仓库克隆到当前目录下,并在当前目录下创建一个与仓库同名的文件夹。
2. 查看工作区和暂存区状态
随时了解当前文件的修改状态。
git status
解析: 显示工作区中哪些文件被修改但未暂存,哪些文件已被暂存等待提交,以及哪些文件是未被 Git 跟踪的新文件。
3. 暂存文件
将工作区的修改添加到暂存区,准备提交。
git add <file>
解析: 将指定文件添加到暂存区。
git add .
解析: 将当前目录下所有修改和新增的文件都添加到暂存区。
4. 提交修改
git commit -m “提交信息”
解析: 创建一个新的提交,包含暂存区的所有修改,并附带简洁的提交信息。
git commit
解析: 创建一个新的提交。执行此命令后,Git 会打开一个编辑器让你编写详细的提交信息。
二、Git 分支管理
1. 查看提交历史
了解项目的提交进展和分支情况。
git log
解析: 显示完整的提交历史记录,包括每个提交的哈希值、作者、日期和提交信息。按 q
键退出查看。
git log -1
解析: 只显示最新的一个提交记录。
2. 创建分支
在当前提交的基础上创建一个新的分支。
git branch <branch-name>
解析: 在当前 HEAD 指向的提交上创建一个名为 <branch-name>
的新分支。
3. 切换分支
将 HEAD 指针移动到指定分支,切换到该分支进行开发。
git checkout <branch-name>
解析: 切换到指定分支。切换后,工作区文件会更新为该分支最新提交的状态。
4. 合并分支
将一个分支的修改合并到当前分支。
git merge <branch-name>
解析: 将指定分支的修改合并到当前分支。如果存在冲突,需要手动解决。
三、Git 远程操作
1. 添加远程源
将本地仓库关联到远程仓库。
git remote add <远程仓库名称> <远程仓库URL>
解析: 将指定 URL 的远程仓库添加到本地仓库的远程源列表中,并指定一个名称(通常是 origin
或 github
)。
2. 从远程仓库拉取
获取远程仓库的最新修改。
git fetch <远程仓库名称>
解析: 从指定的远程仓库获取所有分支和提交历史,但不会自动合并到本地分支。获取的远程分支会保存在远程跟踪分支中(例如 origin/main
)。
git pull <远程仓库名称> <远程分支名称>
解析: 从指定的远程仓库的指定分支拉取最新修改并自动合并到当前本地分支。相当于 git fetch
+ git merge
。
git pull
解析: 如果当前本地分支已设置上游跟踪分支,直接执行 git pull
会从关联的远程分支拉取最新修改并合并。
git pull --allow-unrelated-histories
解析: 在合并不相关的历史时,明确告诉 Git 允许进行合并,从而将两个独立的提交历史连接起来。这通常在将本地仓库与一个已存在并包含提交的远程仓库关联时使用。
3. 远程推送
将本地仓库的修改发送到远程仓库。
git push <远程仓库名称> <本地分支名称>
解析: 将本地指定分支的最新修改推送到远程仓库的对应分支。
git push <远程仓库名称> <本地分支名称> --force
解析: 强制将本地分支推送到远程仓库,覆盖远程分支的历史。谨慎使用,特别是对于共享仓库。
git push <远程仓库名称> <本地分支名称> --force-with-lease
解析: 在远程分支没有在你上次拉取后被其他人修改过的情况下,强制将本地分支推送到远程仓库。这是更安全的强制推送方式。
四、撤销修改
学习如何撤销不同阶段的修改。
1. 撤销工作区的修改
丢弃尚未暂存的修改。
git restore <file>
解析: 将工作区中指定文件的修改丢弃,恢复到上一次提交或暂存的状态。
2. 撤销暂存区的修改
将已暂存的修改移回工作区。
git restore --staged <file>
解析: 将指定文件从暂存区移除,但保留工作区的修改。
3. 撤销提交 (创建新的撤销提交)
安全地撤销已提交的修改,保留历史记录。
git revert <commit>
解析: 创建一个新的提交,该提交会撤销指定提交所引入的修改。通常用于已经推送到共享远程仓库的提交。
4. 撤销最新的一个或几个提交 (谨慎使用)
丢弃最新的提交及其修改。
git reset --hard HEAD~<n>
解析: 将当前分支的 HEAD 指针强制移动到最新的一个或几个提交之前,同时丢弃这些提交及其工作区和暂存区的所有修改。 <n>
是要删除的提交数量。例如, HEAD~1
删除最新的一个提交, HEAD~2
删除最新的两个提交。
5. 删除远程仓库中的某个提交记录。
删除远程仓库中的提交记录需要非常谨慎,因为它会改写远程仓库的历史。如果这些提交已经被其他人拉取到他们的本地仓库,强行删除远程提交可能会导致其他人在拉取时遇到问题。通常情况下,我们不建议随意删除已经推送到共享远程仓库的提交。如果确实需要撤销远程仓库中的修改,更推荐使用 git revert 命令,然后将 revert 提交推送到远程仓库。然而,如果你非常确定需要删除远程仓库中的某个提交,并且理解可能带来的影响,那么可以使用以下方法:
操作: 在本地删除提交后,使用 git push --force 或 git push --force-with-lease 命令强制推送到远程仓库。
git push origin main --force
更安全的:
git push origin main --force-with-lease
- 说明:
--force-with-lease
是一个更安全的强制推送选项。它只有在远程分支没有在你上次拉取后被其他人修改过的情况下才会成功。如果远程分支在你上次拉取后被其他人修改了,--force-with-lease
会拒绝推送,从而避免覆盖其他人的修改。--force
会强制覆盖远程仓库中对应的分支,即使远程仓库有你本地没有的提交。这可能会导致远程仓库的历史被改写。main
是要推送的分支名称。origin
是远程仓库的名称。git push
是将本地修改推送到远程仓库的命令。
五、高级操作
1. 使用标签
为重要的提交打上永久性标记。
git tag <标签名称>
解析: 给当前的最新提交打上一个名为 <标签名称>
的轻量级标签。
git tag -a <标签名称> -m “标签信息”
解析: 创建一个附注标签。附注标签是一个完整的 Git 对象,包含打标签者的信息、日期、标签信息等。
git tag
解析: 列出本地仓库中的所有标签。
git show <标签名称>
解析: 显示指定标签所指向的提交的详细信息。
2. 设置本地分支与远程分支的关联
方便后续的 git pull
和 git push
操作。
git branch --set-upstream-to=<远程仓库名称>/<远程分支名称> <本地分支名称>
解析: 将本地分支 <本地分支名称>
与远程仓库 <远程仓库名称>
的远程分支 <远程分支名称>
建立跟踪关系。
实际应用场景一(创建一个新的本地分支进行关联):
当你创建一个新的本地分支,并且希望它与远程仓库上的同名分支关联时,可以使用这个命令。
例如,你创建了一个新的本地分支:
git checkout -b hostmain
然后,如果你想将这个本地分支推送到远程仓库origin并设置上游关系,可以这样做:
git push -u origin hostmain
-u
选项是--set-upstream
的缩写,它在推送的同时设置上游跟踪关系。这是一种更常见的创建新分支并立即设置上游关系的方式。
实际应用场景二(对已有的本地分支进行关联):
你已经有了本地分支,并且远程仓库上也有了一个同名分支(可能是别人创建的),你想将本地分支与远程分支关联起来,就可以使用 git branch --set-upstream-to
命令。
示例步骤:
确保你在你想要设置关联的本地分支上:
git checkout
执行
git branch --set-upstream-to
命令设置上游跟踪关系:
git branch --set-upstream-to=origin/hostmain
验证上游跟踪关系是否设置成功:
git status
总结:
git branch --set-upstream-to=<远程仓库名称>/<远程分支名称> <本地分支名称>
命令用于将本地分支与指定的远程跟踪分支建立上游跟踪关系,从而方便后续的 git pull
和 git push
操作。在创建新分支并立即推送到远程时,使用 git push -u
是更常用的方式。
六、常见问题与错误处理
1. 处理分歧分支 ( divergent branches
)
当本地分支和远程分支有独立提交时,需要指定合并策略。
git pull --no-rebase
解析: 在拉取时使用默认的合并策略(merge),而不是变基(rebase)。
2. 处理不相关的历史 ( unrelated histories
)
当本地仓库和远程仓库的提交历史完全独立时,需要允许合并不相关历史。
git pull --allow-unrelated-histories
解析: 在合并不相关的历史时,明确告诉 Git 允许进行合并。
发表留言 取消回复