Git是一种分布式版本控制系统
,用于跟踪文件的变化并协作开发项目。它由Linus Torvalds在2005年创建,主要用于Linux内核的开发,但现在已经成为许多项目的标准版本控制系统。
关于Git的一些关键概念和基本原理如下:
版本控制: Git跟踪项目文件的变化,以便在不同的时间点恢复、比较或合并这些变化。这使得团队能够协作,同时保留项目历史记录。
分布式系统: 每个协作者都拥有完整的代码仓库,包括完整的版本历史。这使得在没有网络连接的情况下也能够继续工作,并且使得协作更加灵活。
仓库(Repository): Git仓库是包含项目文件和元数据的目录。它包括项目的完整历史记录和所有分支。
工作区(Working Directory):工作区是包含项目文件的目录,可以进行修改和编辑。这是你实际工作的地方。
暂存区(Staging Area):暂存区是一个临时区域,用于存储准备提交的文件。在将文件提交到版本库之前,你需要将它们添加到暂存区。
提交(Commit): 提交是将文件的变化保存到版本库的操作。每个提交都有一个唯一的标识符,称为SHA-1哈希。
分支(Branch):分支是项目的不同线条,每个分支代表一个独立的开发路径。分支可以合并,以将不同的工作合并到一起。
远程仓库(Remote Repository):远程仓库是存储在网络上的项目的镜像,通常是团队共享和协作的中心。
克隆(Clone):克隆是获取远程仓库的拷贝,可以在本地进行开发。
推送(Push):推送是将本地提交上传到远程仓库的操作。
拉取(Pull):拉取是将远程仓库的更新同步到本地仓库的操作。
Git提供了强大的工具,使团队能够高效地合作,跟踪项目的演变,并处理各种开发场景中的复杂性。通过这些概念和命令,开发者可以更好地管理项目的版本历史,减少冲突,追踪问题,并实现高效的代码协作。
通过Git,开发者可以很轻松地将项目代码推送到Github、Gitee、云效codeup等代码仓库平台,并进行团队协作开发。
在Windows系统下,使用Git主要通过从Git官方网站下载安装程序,按照提示安装,并确保选择安装Git Bash
。
而倘若使用Pycharm
、IDEA
等软件,这些集成开发环境(IDE)内置了对Git的支持,并包括了Git的命令行工具,因此可以直接在IDE中进行版本控制操作,而无需额外安装Git Bash。
将当前目录初始化为Git仓库:
git init # 将当前目录初始化为Git仓库:
该命令执行完之后会在当前目录下生成一个.git 的目录文件。这个.git目录是Git版本控制系统的核心,包含了项目的所有版本历史、配置信息和元数据。这个目录的存在标志着该目录已经变成了一个Git仓库。
根据远程已有的Git仓库的URL地址,将项目从远程拷贝至本地:
git clone <repo_url> <local_directory>
参数解释
repo_url:远程Git仓库的URL地址,.git后缀,例如 https://github.com/YuDongPan/Cannonical_Classifier.git
local_directory:拷贝到的本地目录,例如 ./my_project, 表示拷贝到my_project目录下。若不填,则默认拷贝至当前目录下。
配置Git用户信息是为了在提交历史中标识作者身份。通过设置用户姓名和邮箱,有助于协作、追踪版本历史、增加代码的可追溯性。
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
配置后,在每次提交时,Git都会记录作者的姓名和邮箱。这使得你可以准确地知道谁对项目做出了贡献。配置是全局的,适用于所有Git仓库,有助于建立更有序和可信的版本控制环境。
当我们对本地仓库代码进行修改后,欲使得远程仓库代码进行同步更改,我们需要先将修改后的本地代码添加至暂存区(Staging Area)。
git add <filename> # 表示单独添加一个文件
git add . # 表示添加所有文件
若不确定当前目录下的文件添加状况, 可使用以下命令,查询各文件状态:
git status
之后实际提交(Commit)修改的代码至暂存区:
git commit -m "提交说明"
暂存区为每一次 Commit 的代码生成一个 Commit_Hash,使用以下命令,可以很方便追踪到项目的每一次修改记录。
git log
暂存区默认指向最后一次修改后提交的结果。
将本地仓库修改的代码Commit至了暂存区后,便可推送至远程Git仓库了。
git push origin <branch_name>
参数解释:
branch_name: 推送至的分支名称, 一般为master分支,但也可能为main分支或任何用户自定义的分支。
值得注意的是,若没有克隆现有仓库,欲将本地仓库链接到某个远程的Git仓库,则可通过以下命令进行链接:
git remote add origin <repo_url>
git pull
命令用于从远程仓库获取最新的代码并将其合并到当前分支。它实际上是 git fetch
和 git merge
两个命令的组合。
git pull [<remote_repo>] [<remote_branch>:<local_branch>]
参数详解:
remote_repo:远程仓库。如果没有提供远程仓库,默认会使用远程仓库的 origin。
remote_branch, local_branch: 远程分支与本地分支。如果没有提供远程分支和本地分支,默认会拉取远程分支并与当前分支合并。
获取远程更新 (git fetch):
git pull 首先会调用 git fetch命令,从远程仓库下载最新的代码、分支等信息。但与 git fetch 不同,git pull 会将这些更新直接合并到当前分支,省去了额外的步骤。
合并到本地分支(git merge)
git pull 接着会调用 git merge 命令,将从远程仓库下载的最新代码合并到当前分支。
拉取并合并远程分支代码到当前本地分支
git pull origin main
这会从 origin 远程仓库的 main 分支拉取最新代码,并将其合并到当前所在的本地分支。
git pull
如果在 git pull 后不指定远程分支和本地分支,它将默认使用配置中的跟踪分支(通常是当前分支的远程对应分支)。
注意事项:
1、如果当前分支有未提交的更改,git pull 可能会导致冲突。在执行 pull 之前,建议先提交或者撤销本地的更改。
2、当拉取过程中有冲突时,需要手动解决冲突并执行 git pull 继续合并。
在Git中,分支(Branch)是指向某次提交的可移动指针。Git使用分支来管理不同的开发路径,允许在项目中同时进行多个独立的工作。Git中常用的分支类型有以下六种:
git branch
命令用于列出、创建、删除或重命名分支。
git branch
这将显示所有本地分支的列表,当前分支前会有一个 * 号标识。
git branch <new_branch>
这会创建一个新分支,但不会自动切换到新分支。
git checkout <branch_name>
# 或者使用 -b 选项创建并切换到新分支:
git checkout -b <new_branch>
# 或者使用 `git switch` 命令进行分支切换:
git switch -c <new_branch>
git branch -d <branch_name>
# 这会删除指定的本地分支。如果分支还未合并,需要使用 -D 选项强制删除:
git branch -D <branch_name>
git branch -r
这会显示远程分支的列表。
git branch -a
这会显示本地和远程分支的完整列表。
git branch -m <old_branch> <new_branch>
注意事项: 分支的创建、切换、删除和重命名等操作都是本地的,如果需要在远程仓库中应用这些变更,需要进行相应的推送和拉取操作。
git remote
命令用于管理与远程仓库的关联。以下是一些常见的 git remote 相关的命令:
git remote -v
这条命令将显示当前仓库关联的远程仓库信息,包括名称和URL。
git remote add <remote_repo_name> <remote_repo_url>
参数解释:
remote_repo_name: 远程仓库名称
remote_repo_url: 远程仓库URL
这条命令将远程仓库添加到本地仓库的远程仓库列表中。
git remote remove <remote_repo_name>
# or
git remote rm <remote_repo_name>
这两条命令可任选一条执行,执行后将从本地仓库的远程仓库列表中移除指定的远程仓库。
git remote show <remote_repo_name>
此命令用于显示指定远程仓库的详细信息,包括远程分支。
git remote rename <old_remote_repo_name> <new_remote_repo_name>
此命令将本地仓库中已有的远程仓库重命名。
git remote set-url <remote_repo_name> <remote_repo_url>
此命令用于修改已有远程仓库的URL。
git pull <remote_repo_name> <branch_name>
此命令从指定的远程仓库拉取更新并合并到本地分支。
git push <remote_repo_name> <local_branch>:<remote_branch>
此命令用于将本地分支的提交推送到指定的远程分支。
git checkout -- <filename>
这个命令会用最近一次提交(commit)的版本覆盖工作区中的指定文件,取消对该文件的修改。如果在之前的提交中有对文件的修改,这个命令将会撤销这些修改。
git reset HEAD <filename>
这个命令会取消之前使用 git add
将指定文件添加到暂存区的操作,将该文件从暂存区移回到工作区,但不改变工作区文件的实际内容。
- git reset --hard HEAD^
这个命令是一个较为激进的操作,会将当前分支的 HEAD 指针和工作区都重置到上一次的提交(HEAD^ 表示上一个提交)状态。这样会丢弃所有未提交的本地修改,慎用,因为无法撤销。
1. git add . # 将本地代码添加到暂存区
2. git commit -m "second commit" # 提交本地代码到暂存区
3. git remote add origin url # 为远程仓库添加别名origin,并添加仓库url
4. git pull --rebase origin master # 将本地的未推送的提交叠加在从远程拉取的提交之上,避免创建不必要的合并提交
5. git push origin master # 将本地的master分支代码提交到远程仓库origin的master分支,将本地的提交同步到远程仓库