关于使用 Git 进行项目开发常用操作

Git 是进行项目开发时的常用的一个仓库,用以本地和 Github 远程仓库进行版本控制和代码管理,下面根据项目开发流程,介绍一下常见的操作。


一、Git是什么?

Git 是一个分布式版本管理软件,可以在本地进行代码的版本控制,同时也可和 Github 连接,从而实现远程仓库的管理,实现多开发者在 Github 上面实现开发和合并。

这里首先对 git 的操作进行大致的讲解,随后在后面讲解常规及常用执行步骤(这里参考了菜鸟教程)。

git-structure

  • 工作区与暂存区交互

    • add <file>:本地内容增删或修改时,该指令将当前工作区目录同步到暂存区,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
    • checkout -- <file>:会用暂存区指定的文件替换工作区的文件,该操作很危险,会清除工作区中未添加到暂存区中的改动。
  • 暂存区与本地仓库交互

    • commit:暂存区的目录树写到本地仓库中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
    • reset HEAD:暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
  • 工作区与本地仓库交互

    • checkout HEAD <file>
  • 删除命令

    • rm <file>:删除工作区文件。
    • rm --cached <file>:删除暂存区文件,但不改动工作区文件。

二、基本步骤

1. Git 下载及安装

Linux or MacOS

Linux or MacOS 系统往往自带 Git,如果没有的话可以使用相关软件管理工具进行一键安装。

# Linux 
sudo apt install git

# MacOS
sudo brew install git

Windows

如果是Windows系统,在 Windows 上安装 Git 也有几种安装方法。 官方版本可以在 Git 官方网站下载。 打开 Git - Downloading Package,下载会自动开始。 要注意这是一个名为 Git for Windows 的项目(也叫做 msysGit),和 Git 是分别独立的项目;更多信息请访问 Redirecting Git for Windows’ homepage…

要进行自动安装,你可以使用 Git Chocolatey 包。 注意 Chocolatey 包是由社区维护的。

另一个简单的方法是安装 GitHub Desktop。 该安装程序包含图形化和命令行版本的 Git。 它也能支持 Powershell,提供了稳定的凭证缓存和健全的换行设置。 稍后我们会对这方面有更多了解,现在只要一句话就够了,这些都是你所需要的。 你可以在 GitHub for Windows 网站下载,网址为 GitHub Desktop 网站

2. 仓库搭建及配置(常规使用流程)

2.1 仓库初始化

首先寻找一个自己准备作为本地仓库的文件夹,并在终端打开,例如这里的test:

img

输入以下内容,进行本地仓库初始化操作。此时会生成一个.git文件夹。

# 本地仓库初始化
git init

# 或者进行远程仓库的同步
git clone https://github.com/xxx/xxx.git

2.2 最重要的命令!!!

git status可以说是git使用时最常用的,最重要的命令啦,当不知道当前你是该add或者commit那些文件的时候,使用该命令就知道那些文件修改了,那些文件已经add,同时也会提示你下一步该add还是commit。总之是很重要的命令!

# 查看当前git状态
git status

2.3 常用变量配置

由于要和 Github 远程仓库进行交互,因此需要对 username 和 email 两项进行配置,如果你希望在该系统上任何地方都使用该 name 和 email ,可以添加 “–global” 进行全局的设定。

 # 设定当前目录下变量 
git config user.name "yourname"
git config user.email youremail@example.com

# 设定全局变量
git config --global user.name "yourname"
git config --global user.email youremail@example.com

更改完毕后,可以通过以下指令来查看配置情况,同时也可查看配置文件的路径。

# 查看配置 
git config --list

# 查看配置文件路径
git config --list --show-origin

2.4 常规操作

在进行简单配置后,进行本地仓库的管理,当选择 git init 进行的仓库初始化,为了避免分支不存在,我们最好养成习惯,在每个项目之前都在该文件夹中书写一个简单的 MarkDown 文件 ReadMe.md

文件书写完毕之后,文件夹情况应该是如图:

接着在该路径下的 Git bash 中进行文件的添加 add(添加到缓存区)和提交 commit 操作。

文件添加,有以下几种常用形式:

# 单文件添加 
git add test.py

# 所有py文件
git add *.py

# 目录下所有文件
git add .

添加之后,我们需要进行 commit 操作,可以添加一些你对内容的描述。

# commit 提交 -m " Description of the file " 
git commit -m " Update"

2.5 分支操作

在我们第一次使用分支操作时,可能会出现无返回值的情况,这是因为我们的暂存区无内容,同时没有 commit 导致的,因此我们只需在执行以上操作即可。

# 查看分支 
git branch

# 新建分支
git branch your-dev

# 切换分支
git checkout your-dev

# 查看所有分支(远程)
git branch -a

3. 远程仓库配置

通常我们的开发是在 Github 上面,因此这里我们需要连接远程仓库,以便我们的开发和版本管理。

配置

这里对 remote 进行添加来配置,同时如果希望修改,也可以通过对 remote 删除再添加的方式进行修改。

# remote 添加 
git remote add origin https://github.com/yourname/example.git

# remote 删除 并 添加
git remote remove origin
git remote add origin https://github.com/yourname/example2.git

下拉和上传(pull 和 push)

针对远程仓库主要是以下两种方式进行内容修改。

pull 部分:

# git pull <主机名> <远程分支>:<本地分支> 
# 远程仓库分支和本地仓库分支不同名
git pull origin master:local

# 远程仓库分支和本地仓库分支同名
git pull origin master

# git push <主机名> <本地分支>:<远程分支>
# 远程仓库分支和本地仓库分支不同名
git push origin local:master

# 远程仓库分支和本地仓库分支同名
git push origin master

针对 pull 的一些解释:

pull 其实时 fetch 和 merge 的简化操作,如果时刚上手 Git ,使用 pull 是个很好的选择,当然个人还是更推荐使用 fetch 和 merge 操作。

由于最近新版本 Git 有了一些更细致的要求,要对 pull 进行设置,如果当你使用时出现提示您配置 pull,推荐您使用下面的命令来解决。 如果想进一步了解可以参考这里

# 既保持当前的默认合并策略,保证不再出现配置合并策略的警告文案 
git config pull.ff false

针对 push 的一些常见参数操作:

# push 
# 如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数
git push --force origin master

# 删除主机但分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支
git push origin --delete master

多人开发时请注意:在进行多人远程仓库开发时,存在版本冲突问题,最好在每次上传前,都将现有部分进行 pull 操作,以免导致版本冲突过多,进行手动调节。

4. 常用命令总结

# 查看工作区和暂存区的状态
git status
# 将工作区的文件提交到暂存区
git add .
# 提交到本地仓库
git commit -m "本次提交说明"
# add和commit的合并,便捷写法(未追踪的文件无法直接提交到暂存区/本地仓库)
git commit -am "本次提交说明"
# 将本地分支和远程分支进行关联
git push -u origin branchName
# 将本地仓库的文件推送到远程分支
git push
# 拉取远程分支的代码
git pull origin branchName
# 合并分支
git merge branchName
# 查看本地拥有哪些分支
git branch
# 查看所有分支(包括远程分支和本地分支)
git branch -a
# 切换分支
git checkout branchName
# 临时将工作区文件的修改保存至堆栈中
git stash
# 将之前保存至堆栈中的文件取出来
git stash pop