Git新手入门指南(1)

75 阅读12分钟

Git的重要概念简介

首先你需要安装Git,可以自行进行百度。

新手使用Git将本地的代码上传到远程仓库时,执行:

git add . 
git commit -m "your message"
git pull 
git push 

这是日常使用Git最常用的四个命令,背后囊括了Git版本控制的原理。

  1. git add .:这个命令将所有未跟踪的文件和已修改的文件添加到 Git 的暂存区。"." 表示当前目录及其所有子目录。暂存区是一个预备提交的地方,你可以将你的更改分批次添加到暂存区,然后一次性提交。
  2. git commit -m "your message":这个命令将暂存区的更改提交到本地仓库-m 参数允许你添加一个提交消息,这是一个描述你所做更改的简短说明。
  3. git pull:这个命令从你的远程仓库拉取最新的更改,并将这些更改合并到你的当前分支。这个命令的目的是确保你的本地仓库和远程仓库保持同步。防止产生冲突
  4. git push:这个命令将你的本地仓库的更改推送到远程仓库。这意味着你的提交会被上传到远程仓库,其他人就可以看到和拉取你的更改。

截屏2023-07-16 10.03.03

                     图. git常用操作图解                (图来自菜鸟教程)

上述四个命令,就是从workspace到remote repository的过程。下面介绍一下Git 中的四个重要的概念。

  1. 工作区(Workspace):这是你可以看到和编辑的项目文件,也就是你打开IDE的项目所看到的文件。这些文件可能已经被 Git 追踪(也就是说,它们在上一次提交时就存在),也可能是新添加的文件(即,Git 之前并不知道它们)。
  2. 暂存区(Staging Area):也被称为 "索引",这是你预备提交更改的地方。当你执行 git add 命令时,你的更改将会被添加到暂存区。
  3. 本地仓库(Local Repository):这是在你的电脑上的一个数据库,保存了你所有的提交,包括提交的元数据(例如提交者、提交时间等)和与上一次提交的差异。这使得你可以查看你的项目的历史,或者恢复到一个早期的状态。仓库有多个分支,每个分支是项目的一个版本。简化来说,工作区是
  4. 远程仓库(Remote Repository):这是存在于网络上(例如 GitHub、GitLab、Bitbucket 等托管服务上)的仓库,可以与其他人共享。你可以将你的本地仓库的更改推送到远程仓库,也可以从远程仓库拉取更改到你的本地仓库。

在 Git 的工作流中,你通常会在工作区中编辑文件,然后将你的更改添加到暂存区,再将暂存区的更改提交到本地仓库,最后将本地仓库的更改推送到远程仓库。

远程仓库

你是如何从Github上下载代码的呢? 如果你是菜鸟,你可能直接从网站上下载一个Zip项目文件,再把文件解压缩,拖到IDE中。但熟悉Git的同学,往往是用clone命令,这两者有什么区别呢?

  1. 下载代码:当你下载代码时,你只是获取了仓库中某一特定时刻的快照,通常是主分支的最新状态。**你会得到一个包含了所有文件和目录的压缩包,但不包含Git的版本历史或其他元数据。**因此,你不能进行提交、拉取或推送操作,也不能查看历史记录或切换到不同的分支。简单来说,你只有代码,但没有Git的功能。
  2. 克隆仓库:当你克隆一个仓库时,你实际上是在本地创建了一个仓库的完整副本,包括所有的文件、目录、分支和版本历史。这使得你能够查看历史记录、创建和切换分支、进行提交、拉取和推送更改等。简单来说,克隆一个仓库使得你可以完全利用Git的功能进行版本控制。

下面来演示,如何从远程仓库克隆代码。

首先,需要使用配置SSH链接,将本地电脑和远程仓库连接起来。

  1. 打开终端:mac和windos都有相应的终端

  2. 生成新的SSH密钥:运行以下命令,将邮件地址替换为你在GitHub上注册的邮箱地址。

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    

    当系统提示你"Enter a file in which to save the key"时,直接按回车键,接受默认文件位置(通常是~/.ssh/id_rsa)。然后,你会被提示输入一个密码,你可以选择输入一个也可以直接回车留空。

  3. 启动SSH Agent:运行以下命令来启动SSH Agent。

    eval "$(ssh-agent -s)"
    
  4. 将新的SSH密钥添加到ssh-agent:运行以下命令将SSH私钥添加到ssh-agent。

    ssh-add ~/.ssh/id_rsa
    
  5. 将新的SSH公钥添加到你的GitHub帐户:运行以下命令,将SSH公钥复制到剪贴板。

    Windows:

    clip < ~/.ssh/id_rsa.pub
    

    Mac:

    pbcopy < ~/.ssh/id_rsa.pub### Git的四个实体和常用命令
    

请先百度如何安装Git

使用Git将本地的代码上传到远程仓库时,执行:

git add . 
git commit -m "your message"
git pull 
git push 

这是日常使用Git最常用的四个命令,背后囊括了Git版本控制的原理。

  1. git add .:这个命令将所有未跟踪的文件和已修改的文件添加到 Git 的暂存区。"." 表示当前目录及其所有子目录。暂存区是一个预备提交的地方,你可以将你的更改分批次添加到暂存区,然后一次性提交。
  2. git commit -m "your message":这个命令将暂存区的更改提交到本地仓库-m 参数允许你添加一个提交消息,这是一个描述你所做更改的简短说明。
  3. git pull:这个命令从你的远程仓库拉取最新的更改,并将这些更改合并到你的当前分支。这个命令的目的是确保你的本地仓库和远程仓库保持同步。防止产生冲突
  4. git push:这个命令将你的本地仓库的更改推送到远程仓库。这意味着你的提交会被上传到远程仓库,其他人就可以看到和拉取你的更改。

截屏2023-07-16 10.03.03

​ 图. git常用操作图解 (图来自菜鸟教程)

上述四个命令,就是从workspace到remote repository的过程。下面介绍一下Git 中的四个重要的概念。

  1. 工作区(Workspace):这是你可以看到和编辑的项目文件,也就是你打开IDE的项目所看到的文件。这些文件可能已经被 Git 追踪(也就是说,它们在上一次提交时就存在),也可能是新添加的文件(即,Git 之前并不知道它们)。
  2. 暂存区(Staging Area):也被称为 "索引",这是你预备提交更改的地方。当你执行 git add 命令时,你的更改将会被添加到暂存区。
  3. 本地仓库(Local Repository):这是在你的电脑上的一个数据库,保存了你所有的提交,包括提交的元数据(例如提交者、提交时间等)和与上一次提交的差异。这使得你可以查看你的项目的历史,或者恢复到一个早期的状态。仓库有多个分支,每个分支是项目的一个版本。简化来说,工作区是
  4. 远程仓库(Remote Repository):这是存在于网络上(例如 GitHub、GitLab、Bitbucket 等托管服务上)的仓库,可以与其他人共享。你可以将你的本地仓库的更改推送到远程仓库,也可以从远程仓库拉取更改到你的本地仓库。

在 Git 的工作流中,你通常会在工作区中编辑文件,然后将你的更改添加到暂存区,再将暂存区的更改提交到本地仓库,最后将本地仓库的更改推送到远程仓库。

远程仓库

你是如何从Github上下载代码的呢? 如果你是菜鸟,你可能直接从网站上下载一个Zip项目文件,再把文件解压缩,拖到IDE中。但熟悉Git的同学,往往是用clone命令,这两者有什么区别呢?

  1. 下载代码:当你下载代码时,你只是获取了仓库中某一特定时刻的快照,通常是主分支的最新状态。**你会得到一个包含了所有文件和目录的压缩包,但不包含Git的版本历史或其他元数据。**因此,你不能进行提交、拉取或推送操作,也不能查看历史记录或切换到不同的分支。简单来说,你只有代码,但没有Git的功能。
  2. 克隆仓库:当你克隆一个仓库时,你实际上是在本地创建了一个仓库的完整副本,包括所有的文件、目录、分支和版本历史。这使得你能够查看历史记录、创建和切换分支、进行提交、拉取和推送更改等。简单来说,克隆一个仓库使得你可以完全利用Git的功能进行版本控制。

下面来演示,如何从远程仓库克隆代码。

首先,需要使用配置SSH链接,将本地电脑和远程仓库连接起来。

  1. 打开终端

  2. 生成新的SSH密钥:在Git Bash中,运行以下命令,将邮件地址替换为你在GitHub上注册的邮箱地址。

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    

    当系统提示你"Enter a file in which to save the key"时,直接按回车键,接受默认文件位置(通常是~/.ssh/id_rsa)。然后,你会被提示输入一个密码,你可以选择输入一个也可以直接回车留空。

  3. 启动SSH Agent:在Git Bash中,运行以下命令来启动SSH Agent。

    eval "$(ssh-agent -s)"
    
  4. 将新的SSH密钥添加到ssh-agent:运行以下命令将SSH私钥添加到ssh-agent。

    ssh-add ~/.ssh/id_rsa
    
  5. 将新的SSH公钥添加到你的GitHub帐户:在Git Bash中运行以下命令,将SSH公钥复制到剪贴板。

    Windows:

    clip < ~/.ssh/id_rsa.pub
    

    Mac:

    pbcopy < ~/.ssh/id_rsa.pub
    

    然后,打开GitHub网站,点击你的头像,选择"Settings"。在左侧菜单中,点击"SSH and GPG keys",然后点击"New SSH key"。在"Title"字段中,输入一个描述性的名字,比如"My PC"。在"Key"字段中,粘贴你的公钥。最后,点击"Add SSH key"。

    这样就建立了ssh链接,本地电脑和远程仓库之间就畅通无阻了。

  6. 克隆GitHub仓库:现在,你可以使用git clone命令来克隆GitHub仓库。记住,你应该使用SSH URL来克隆仓库,它看起来像这样:git@github.com:username/repo.git。你可以在GitHub仓库的主页上找到这个URL,点击"Clone or download"按钮,然后选择"Use SSH"。截屏2023-07-16 11.27.55

    git clone git@github.com:username/repo.git
    

    请将usernamerepo.git替换为你的GitHub用户名和仓库名。

工作区、缓存区、本地仓库

工作区就是我们在IDE上看到的目录,通过git add 将工作区的内容添加到缓存区,再通过git commit添加到缓存区。通过git checkout可以将本地仓库的更新到工作区。git checkout也是切换分支的命令,其实就是将本地仓库上对应的分支内容,加载到工作区。

除了上面提到的常见的命令,还有以下。

  1. 取消暂存文件

如果你想取消暂存某些文件,你可以使用 git reset 命令。例如,如果你想取消暂存名为 file1.txt 的文件,你可以运行:

git reset file1.txt

这将会把 file1.txt 文件从暂存区移出,但是文件的修改仍然保留。

  1. 取消所有暂存文件

如果你想取消所有暂存的文件,你可以运行:

git reset

这将会把所有文件从暂存区移出,但是文件的修改仍然保留。

  1. 放弃文件的修改

如果你想放弃对某个文件的修改,包括工作区和暂存区的修改,你可以使用 git checkout 命令。例如,如果你想放弃对 file1.txt 的修改,你可以运行:

git checkout -- file1.txt

这将会把 file1.txt 文件恢复到最后一次提交的状态。

  1. 放弃所有文件的修改

如果你想放弃所有文件的修改,你可以运行:

git checkout -- .

这将会把所有文件恢复到最后一次提交的状态。

注意:以上的 git checkout -- filegit checkout -- . 命令会丢弃所有未提交的修改,请确保你不需要这些修改或者已经做好备份。

分支

**分支:**是Git的大杀器,也是程序员日常的工作流之一。Git的分支功能非常强大,它允许你创建多个独立的开发线路,从而使得协同工作和特性开发更加容易和高效。

  1. 假设你正在一个项目中工作,该项目已经有一个 master 分支,你需要开发一个新功能,我们称之为 new-feature。你可以创建一个新分支来进行这项工作:

    git checkout -b new-feature
    

    这个命令将创建一个名为 new-feature 的新分支,并立即切换到这个新分支。

  2. new-feature 分支上,你可以进行开发工作,比如修改文件、添加新文件等。当你完成了一部分工作并想要保存当前的进度,你可以进行提交:

    git add .
    git commit -m "Add part of the new feature"
    

    这将把所有更改添加到暂存区,然后创建一个新的提交。

  3. 假设你现在完成了 new-feature 的开发,你可以切换回 master 分支,并将你的新功能合并到 master 分支:

    git checkout master
    git merge new-feature
    

    这将将 new-feature 分支的所有更改合并到 master 分支。

  4. 一旦你的新功能被合并,并且你确认不再需要 new-feature 分支,你可以删除这个分支:

    git branch -d new-feature
    

    这将删除 new-feature 分支。

上面演示的是在本地仓库上进行分支合并。在公司里,你需要连接远程仓库,把新分支推送到远程仓库,然后再和进行合并。

  1. 创建并切换到新的分支:

    git checkout -b new-feature
    

    这个命令将创建一个名为 new-feature 的新分支,并立即切换到这个新分支。

  2. new-feature 分支上,进行开发工作,修改文件、添加新文件等。当你完成了一部分工作并想要保存当前的进度,你可以进行提交:

    git add .
    git commit -m "Add part of the new feature"
    

    这将把所有更改添加到暂存区,然后创建一个新的提交。

  3. 将新功能推送到远程的 new-feature 分支:

    git push origin new-feature
    

    注意:origin是远程仓库的名字,一般默认是origin。这个命令将创建一个新的远程分支(如果它还不存在),并将你的更改推送到这个远程分支。

  4. 在GitHub(或其他你使用的Git托管服务)上,你可以创建一个新的Pull Request,以将 new-feature 分支合并到 master 分支。你可以在这个Pull Request中讨论更改,进行代码审查,等等。

  5. 一旦Pull Request被接受并合并,new-feature 分支的更改就会被合并到 master 分支。在这个点上,你可以选择在你的本地仓库和远程仓库中都删除 new-feature 分支:

    git branch -d new-feature
    git push origin --delete new-feature
    

如何切换分支:

  1. 切换分支:使用git checkout命令可以切换到指定的分支。

    git checkout <branch-name>
    

    这会将当前工作目录切换到指定的分支,让你可以在该分支上进行操作。

  2. 创建并切换到新分支:使用git checkout -b命令可以创建一个新的分支并立即切换到该分支。

    git checkout -b <branch-name>
    

    这相当于同时执行了git branch <branch-name>git checkout <branch-name>

  3. 查看分支:使用git branch命令可以查看所有的本地分支。

    git branch
    

    当前分支会在列表中以特殊标记(通常是*号)标识出来。

  4. 查看所有分支

    git branch -a
    

Git冲突

git add . 
git commit -m "your message"
git pull 
git push 

前面举过例子,在将本地分支push到远程分支之前,要先执行pull操作。这是为什么呢? 主要有两个原因:

  1. 避免冲突:如果有其他人在你之前向远程仓库提交了修改,并且他们的修改和你的修改涉及到了同一部分代码,那么在你尝试推送你的修改时可能会发生冲突。如果你在提交之前先执行 git pull,那么你可以在本地解决这些冲突,从而避免推送失败。

  2. 保持代码最新:如果其他人在你之前做了一些重要的修改(例如修复了一个 bug,或添加了一个新功能),那么你可能需要这些修改才能继续你的工作。执行 git pull 可以确保你的代码是最新的。

    然后,打开GitHub网站,点击你的头像,选择"Settings"。在左侧菜单中,点击"SSH and GPG keys",然后点击"New SSH key"。在"Title"字段中,输入一个描述性的名字,比如"My PC"。在"Key"字段中,粘贴你的公钥。最后,点击"Add SSH key"。

    这样就建立了ssh链接,本地电脑和远程仓库之间就畅通无阻了。

  3. 克隆GitHub仓库:现在,你可以使用git clone命令来克隆GitHub仓库。记住,你应该使用SSH URL来克隆仓库,它看起来像这样:git@github.com:username/repo.git。你可以在GitHub仓库的主页上找到这个URL,点击"Clone or download"按钮,然后选择"Use SSH"。截屏2023-07-16 11.27.55

    git clone git@github.com:username/repo.git
    

    请将usernamerepo.git替换为你的GitHub用户名和仓库名。

工作区、缓存区、本地仓库

工作区就是我们在IDE上看到的目录,通过git add 将工作区的内容添加到缓存区,再通过git commit添加到缓存区。通过git checkout可以将本地仓库的更新到工作区。git checkout也是切换分支的命令,其实就是将本地仓库上对应的分支内容,加载到工作区。

除了上面提到的常见的命令,还有以下。

  1. 取消暂存文件

如果你想取消暂存某些文件,你可以使用 git reset 命令。例如,如果你想取消暂存名为 file1.txt 的文件,你可以运行:

git reset file1.txt

这将会把 file1.txt 文件从暂存区移出,但是文件的修改仍然保留。

  1. 取消所有暂存文件

如果你想取消所有暂存的文件,你可以运行:

git reset

这将会把所有文件从暂存区移出,但是文件的修改仍然保留。

  1. 放弃文件的修改

如果你想放弃对某个文件的修改,包括工作区和暂存区的修改,你可以使用 git checkout 命令。例如,如果你想放弃对 file1.txt 的修改,你可以运行:

git checkout -- file1.txt

这将会把 file1.txt 文件恢复到最后一次提交的状态。

  1. 放弃所有文件的修改

如果你想放弃所有文件的修改,你可以运行:

git checkout -- .

这将会把所有文件恢复到最后一次提交的状态。

注意:以上的 git checkout -- filegit checkout -- . 命令会丢弃所有未提交的修改,请确保你不需要这些修改或者已经做好备份。

分支

**分支:**是Git的大杀器,也是程序员日常的工作流之一。Git的分支功能非常强大,它允许你创建多个独立的开发线路,从而使得协同工作和特性开发更加容易和高效。

  1. 假设你正在一个项目中工作,该项目已经有一个 master 分支,你需要开发一个新功能,我们称之为 new-feature。你可以创建一个新分支来进行这项工作:

    git checkout -b new-feature
    

    这个命令将创建一个名为 new-feature 的新分支,并立即切换到这个新分支。

  2. new-feature 分支上,你可以进行开发工作,比如修改文件、添加新文件等。当你完成了一部分工作并想要保存当前的进度,你可以进行提交:

    git add .
    git commit -m "Add part of the new feature"
    

    这将把所有更改添加到暂存区,然后创建一个新的提交。

  3. 假设你现在完成了 new-feature 的开发,你可以切换回 master 分支,并将你的新功能合并到 master 分支:

    git checkout master
    git merge new-feature
    

    这将将 new-feature 分支的所有更改合并到 master 分支。

  4. 一旦你的新功能被合并,并且你确认不再需要 new-feature 分支,你可以删除这个分支:

    git branch -d new-feature
    

    这将删除 new-feature 分支。

上面演示的是在本地仓库上进行分支合并。在公司里,你需要连接远程仓库,把新分支推送到远程仓库,然后再和进行合并。

  1. 创建并切换到新的分支:

    git checkout -b new-feature
    

    这个命令将创建一个名为 new-feature 的新分支,并立即切换到这个新分支。

  2. new-feature 分支上,进行开发工作,修改文件、添加新文件等。当你完成了一部分工作并想要保存当前的进度,你可以进行提交:

    git add .
    git commit -m "Add part of the new feature"
    

    这将把所有更改添加到暂存区,然后创建一个新的提交。

  3. 将新功能推送到远程的 new-feature 分支:

    git push origin new-feature
    

    注意:origin是远程仓库的名字,一般默认是origin。这个命令将创建一个新的远程分支(如果它还不存在),并将你的更改推送到这个远程分支。

  4. 在GitHub(或其他你使用的Git托管服务)上,你可以创建一个新的Pull Request,以将 new-feature 分支合并到 master 分支。你可以在这个Pull Request中讨论更改,进行代码审查,等等。

  5. 一旦Pull Request被接受并合并,new-feature 分支的更改就会被合并到 master 分支。在这个点上,你可以选择在你的本地仓库和远程仓库中都删除 new-feature 分支:

    git branch -d new-feature
    git push origin --delete new-feature
    

如何切换分支:

  1. 切换分支:使用git checkout命令可以切换到指定的分支。

    git checkout <branch-name>
    

    这会将当前工作目录切换到指定的分支,让你可以在该分支上进行操作。

  2. 创建并切换到新分支:使用git checkout -b命令可以创建一个新的分支并立即切换到该分支。

    git checkout -b <branch-name>
    

    这相当于同时执行了git branch <branch-name>git checkout <branch-name>

  3. 查看分支:使用git branch命令可以查看所有的本地分支。

    git branch
    

    当前分支会在列表中以特殊标记(通常是*号)标识出来。

  4. 查看所有分支

    git branch -a
    

Git冲突

git add . 
git commit -m "your message"
git pull 
git push 

前面举过例子,在将本地分支push到远程分支之前,要先执行pull操作。这是为什么呢? 主要有两个原因:

  1. 避免冲突:如果有其他人在你之前向远程仓库提交了修改,并且他们的修改和你的修改涉及到了同一部分代码,那么在你尝试推送你的修改时可能会发生冲突。如果你在提交之前先执行 git pull,那么你可以在本地解决这些冲突,从而避免推送失败。
  2. 保持代码最新:如果其他人在你之前做了一些重要的修改(例如修复了一个 bug,或添加了一个新功能),那么你可能需要这些修改才能继续你的工作。执行 git pull 可以确保你的代码是最新的。