Git 实用学习文档

Git 实用学习文档

Git 基本概念

版本控制: Git是一种分布式版本控制系统,用于跟踪和管理文件和项目的更改历史。版本控制使你能够记录文件的每个修改,并在需要时恢复到先前的版本。

仓库: Git使用仓库(Repository)来存储项目的文件和版本历史。仓库可以是本地的(本地仓库)或远程的(远程仓库)。本地仓库位于本地计算机上,而远程仓库位于共享服务器上,可以供多人协作使用。

提交(Commit): 提交是Git中的基本单位,表示对项目的一次更改。当你对文件进行修改后,需要将这些更改记录为一个提交。每个提交都有一个唯一的标识符,可以用来查看和恢复到该提交的状态。

分支(Branch): 分支允许在同一个仓库中并行开发多个功能或修复不同的bug。每个分支都是仓库中的一个独立的版本。你可以在一个分支上进行开发,并在完成后将更改合并到主分支或其他分支。

Git有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:
git 工作区转换示意图

git 工作区转换示意图

Workspace: 工作区,就是你平时存放项目代码的地方
Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

//git 最常用的相关命令
git init
git init [project-name]
git clone [url]
git status
git log
git config --global user.name "name"
git config --global user.email "email"
git config

git add .
git stash
git commit -m "info"
git push
git pull

git branch //显示分支 本地
git branch -r //显示远程分支
git branch -a // 显示本地 + 远程 分支
git branch -r -d origin/yw_local //删除远程分支
git branch br_name //创建分支名
git checkout br_name//移动到分支名
- 使用命令 `git fetch --prune` 就可以删除本地仓库上,远程仓库已经不在了的分支。
git cherry-pick commit-hash //提交这次本地更改
git cherry-pick <A> <B> //A和B都提交
git cherry-pick A..B //从 A 到 B 的所有提交,不包括A
git cherry-pick A^..B //从 A 到 B 的所有提交,包括A
Git 初始化

当使用Git进行初始化和配置时,以下是一些常用的命令和操作:

1. 初始化新的本地仓库:

git init 

运行git init命令可以将当前目录转变为Git仓库。它会在当前目录下创建一个名为.git的隐藏文件夹,用于存储Git仓库的相关信息。

2. 初始化指定项目名称的本地仓库:

git init [project-name]

可以使用git init [project-name]命令在指定的目录下创建一个新的Git仓库,同时指定一个项目名称。这将在指定目录中创建一个名为.git的隐藏文件夹。

3. 克隆远程仓库到本地:

git clone [url]

运行git clone [url]命令可以克隆一个远程仓库到本地。将[url]替换为远程仓库的URL,Git将在当前目录下创建一个与远程仓库同名的文件夹,并复制所有文件和提交历史到本地。

4. 配置用户名和邮箱:

git config --global user.name "name"
git config --global user.email "email@work.com"

使用git config --global user.name "name"git config --global user.email "email@work.com"命令可以配置全局的用户名和邮箱。将"name"替换为你的用户名,将"email@work.com"替换为你的邮箱地址。

5. 查看配置信息:

git config --global user.name
git config --global user.email

运行git config --global user.namegit config --global user.email命令可以查看当前配置的用户名和邮箱。

以上是关于初始化和配置Git的一些常用命令和操作。通过使用这些命令,你可以创建新的本地仓库,克隆远程仓库,查看状态和提交历史,并配置全局的用户名和邮箱信息。

Git 工作流程

基本的Git工作流程包括以下常用操作:添加文件、提交更改、查看状态、撤销修改等。下面是对每个操作的详细说明:

1. 添加文件: 使用git add命令将文件添加到暂存区,准备进行提交。你可以添加指定的文件或整个目录。

  • 添加单个文件:

    git add <file_name>
    

    <file_name>替换为要添加的文件名。

  • 添加整个目录:

    git add .
    

    这会将当前目录下的所有文件添加到暂存区。

2. 提交更改: 使用git commit命令将暂存区的更改提交到版本库。在提交时,需要提供一个有意义的提交消息来描述这次更改的内容。

  • 提交已暂存的文件:

    git commit -m "commit message"
    

    将commit message替换为你的提交消息。

3. 查看状态: 使用git status命令可以查看当前仓库的状态,包括已修改、已暂存和未跟踪的文件。

  • 查看仓库状态:

    git status
    

    这将显示当前分支的状态以及有关文件的信息,例如已修改、已暂存或未跟踪的文件。

4. 撤销修改: 如果你对文件做出了修改但尚未将其添加到暂存区,可以使用以下命令撤销修改。

  • 撤销对文件的修改:

    git checkout -- <file_name>
    

    将<file_name>替换为要撤销修改的文件名。这将还原文件到上一次提交的状态。

5. 查看提交历史: 使用git log命令可以查看当前分支的提交历史,以及每个提交的相关信息。

  • 查看提交历史:

    git log
    

    这将显示提交的哈希值、作者、日期和提交消息等信息。

6. 查看当前仓库状态: git status命令用于查看当前仓库的状态。它会显示已修改、已暂存和未跟踪的文件,以及分支的信息等。

运行以下命令来查看仓库的状态:

git status

Git将返回一些关键信息,包括:

  • 当前分支的名称。
  • 与上次提交相比是否有文件的修改。
  • 是否有文件已添加到暂存区。
  • 是否有未跟踪的文件。

状态信息可能包括以下几种情况:

  • “On branch <branch_name>”:指示当前所在的分支。
  • “Changes not staged for commit”:表示有已修改但未添加到暂存区的文件。
  • “Changes to be committed”:表示有已暂存但尚未提交的文件。
  • “Untracked files”:表示有未跟踪的文件。

以上是基本的Git工作流程。通过添加文件、提交更改、查看状态和撤销修改等操作,你可以有效地管理你的项目并跟踪项目的版本历史。这些操作是日常开发中使用频率较高的命令,对于掌握基本的Git工作流程非常重要。

Git 远程仓库

远程仓库是位于网络上的Git仓库,用于协作开发、备份代码或与他人共享代码。Git提供了一系列命令来与远程仓库进行交互,包括添加、删除、重命名远程仓库,以及推送和拉取更改等操作。

下面是关于远程仓库的常用操作及相应的Git命令的详细说明:

1. 添加远程仓库: 使用git remote命令来添加远程仓库。

  • 添加一个远程仓库:

    git remote add <remote_name> <remote_url>
    

    将<remote_name>替换为远程仓库的名称,将<remote_url>替换为远程仓库的URL。通过指定名称和URL,将远程仓库与本地仓库关联起来。

2. 删除远程仓库: 使用git remote命令来删除远程仓库。

  • 删除一个远程仓库:

    git remote remove <remote_name>
    

    将<remote_name>替换为要删除的远程仓库的名称。通过指定名称,将删除与该名称关联的远程仓库。

3. 重命名远程仓库: 使用git remote命令来重命名远程仓库。

  • 重命名一个远程仓库:

    git remote rename <old_remote_name> <new_remote_name>
    

    将<old_remote_name>替换为要重命名的远程仓库的旧名称,将<new_remote_name>替换为新的名称。通过指定旧名称和新名称,将远程仓库的名称改为新的名称。

4. 推送更改到远程仓库: 使用git push命令将本地仓库的更改推送到远程仓库。

  • 推送当前分支的更改到远程仓库:

    git push <remote_name> <branch_name>
    

    将<remote_name>替换为远程仓库的名称,将<branch_name>替换为要推送的分支的名称。通过指定远程仓库和分支名称,将本地仓库的更改推送到远程仓库。也可以直接git push 推送到当前的仓库分支。

5. 拉取远程仓库的更改: 使用git pull命令从远程仓库获取最新的更改并合并到本地仓库。

  • 拉取远程仓库当前分支的更改并合并到本地分支:

    git pull <remote_name> <branch_name>
    

    将<remote_name>替换为远程仓库的名称,将<branch_name>替换为要拉取的分支的名称。通过指定远程仓库和分支名称,将远程仓库的最新更改拉取到本地仓库,并自动合并到当前分支。也可以直接git pull 拉取到当前的仓库分支。

6. 获取远程仓库的更改: 使用git fetch命令从远程仓库获取最新的更改,但不自动合并到本地分支。

  • 获取远程仓库当前分支的最新更改:

    git fetch <remote_name> <branch_name>
    

    将<remote_name>替换为远程仓库的名称,将<branch_name>替换为要获取的分支的名称。通过指定远程仓库和分支名称,将远程仓库的最新更改获取到本地仓库,但不自动合并到当前分支。也可以直接git fetch 获取到当前的仓库分支。

以上是与远程仓库进行交互的一些常用操作及相应的Git命令。这些命令可以帮助你与远程仓库进行协作、备份代码以及获取最新的更改。使用这些命令,你可以有效地管理你的项目并与他人共享代码。

Git 分支管理

分支管理在Git中是非常重要的,它允许并行开发不同的功能或修复bug,并帮助团队高效协作。下面将介绍如何创建、切换、合并和删除分支,并介绍常见的分支管理策略,以及简要介绍git cherry-pick命令。

1. 创建分支: 使用git branch命令来创建新的分支。

  • 创建一个新分支:

    git branch <branch_name>
    

    将 <branch_name>替换为新分支的名称。这个命令会在当前所在的提交上创建一个新的分支,但不会切换到新分支。

2. 切换分支: 使用git checkout命令或git switch命令来切换到已存在的分支。

  • 切换到已存在的分支:

    git checkout <branch_name>
    

    git switch <branch_name>
    

    将<branch_name>替换为要切换到的分支名称。这个命令会将工作目录切换到指定的分支,并将HEAD指向该分支。switch为Git2.23以上版本才有的,是为了更清晰的见名知意。

3. 合并分支: 使用git merge命令来合并指定分支到当前分支。

  • 将指定分支合并到当前分支:

    git merge <branch_name>
    

    将<branch_name>替换为要合并到当前分支的分支名称。合并会将指定分支的更改合并到当前分支。

git cherry-pick命令: git cherry-pick命令用于将指定的提交(commit)应用到当前分支,它允许你选择性地将某个提交应用到当前分支,而不是进行整个分支的合并

  • 使用git cherry-pick命令:

    git cherry-pick <commit_hash>
    

    将<commit_hash>替换为要应用的提交的哈希值(可以通过git log 查看)。这个命令会将指定提交的更改应用到当前分支。

    git cherry-pick commit-hash //提交这次本地更改
    
    git cherry-pick <A> <B> //A和B都提交
    
    git cherry-pick A..B //从 A 到 B 的所有提交,不包括A
    
    git cherry-pick A^..B //从 A 到 B 的所有提交,包括A
    

4. 删除分支: 使用git branch命令来删除已存在的分支。

  • 删除一个已存在的分支:

    git branch -d <branch_name>
    

    将<branch_name>替换为要删除的分支名称。这个命令会删除指定的分支。

5. 常见的分支管理策略:

  • 特性分支:对于新功能的开发,可以基于主分支创建一个新的特性分支,进行开发和测试,开发完成后再合并回主分支。
  • 发布分支:用于发布软件版本,可以在主分支的基础上创建一个发布分支,只进行Bug修复和小的改动,不再加入新的功能,确保发布版本的稳定性。
  • 长期支持分支:对于长期维护的版本,可以创建长期支持分支,用于接收重要的Bug修复,确保老版本的稳定性。
解决冲突

在Git中,当进行分支合并时可能会发生冲突,即不同分支对同一部分代码进行了修改。解决冲突的一般步骤如下:

  1. 在合并分支之前,先使用git fetchgit pull命令获取远程仓库的最新更改。

  2. 使用git mergegit rebase命令将一个分支合并到当前分支。如果发生冲突,Git会将冲突标记在文件中。

  3. 打开包含冲突的文件,手动编辑文件解决冲突。冲突部分会被标记为类似以下形式的内容:

    code<<<<<<< HEAD
    // 当前分支的修改
    =======
    // 合并分支的修改
    >>>>>>> branch_name
    

    在编辑文件时,选择保留需要的更改,并删除冲突标记。

  4. 解决冲突后,使用git add命令将修改的文件标记为已解决状态。

  5. 使用git commit命令提交解决冲突的修改。

如果对手动解决冲突不太熟悉,也可以使用图形化的合并工具来解决冲突。

撤销和回退

在Git中,可以使用以下命令来撤销提交、回退到之前的提交状态或恢复删除的文件。

  • 撤销提交:

    git revert <commit_hash>
    

    <commit_hash>替换为要撤销的提交的哈希值。这个命令会创建一个新的提交,以撤销指定提交的更改。

  • 回退到之前的提交状态:

    git reset <commit_hash>
    

    <commit_hash>替换为要回退到的提交的哈希值。这个命令会将当前分支的HEAD指针移动到指定的提交,丢弃之后的提交。

  • 恢复删除的文件:

    git restore <file_path>
    

    <file_path>替换为要恢复的文件路径。这个命令会将文件恢复到最新的提交状态。

需要注意的是,撤销提交和回退提交是不同的操作。git revert会创建一个新的提交,以撤销指定提交的更改,而git reset会移动HEAD指针丢弃部分或全部的提交。

常见问题

常见问题和对应的故障排除技巧:

  1. 修复损坏的仓库:
    • 使用git fsck命令来检查仓库的完整性,并查找潜在的问题。
    • 尝试使用git reflog命令来查看仓库的操作记录,并找回可能丢失的提交。
  2. 恢复丢失的提交:
    • 如果在本地操作时不小心删除了提交,可以使用git reflog命令来找回丢失的提交。
    • 如果在推送到远程仓库后删除了提交,可以与团队协商并进行合适的回滚或修复操作。
  3. 解决冲突:
    • 当合并分支时,如果发生冲突,使用git status命令查看冲突文件的位置和状态。
    • 手动编辑冲突文件,解决冲突并使用git add命令标记为已解决。
    • 继续进行合并操作,然后使用git commit提交合并结果。
  4. 远程仓库访问问题:
    • 确保远程仓库的URL正确,可以使用git remote -v命令查看远程仓库的URL。
    • 检查网络连接是否正常,尝试使用ping命令或通过浏览器访问远程仓库的URL。
    • 如果是SSH协议,确保SSH密钥正确设置并与远程仓库关联。
  5. 错误的操作回滚:
    • 如果在本地操作中误删除或修改了文件,可以使用git checkout命令来恢复文件到最新的提交状态。
    • 如果需要撤销提交,可以使用git revertgit reset命令进行撤销或回退操作。

以上是一些常见问题和故障排除的技巧,但具体的解决方法可能因情况而异。在遇到问题时,可以参考Git的官方文档、查找相关的教程或在开发社区中寻求帮助。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值