程序员Git使用心得,只能帮你到这里了

1. 初次运行Git前的配置

Step1:配置用户信息。鼠标右键单击打开Git Bash,初次使用Git首先须设置你的用户名(例如:me)和邮件地址(例如:icandoitbetter@163.com)。(--global意味着你的用户名和邮件地址信息为全局信息,之后无论你在该系统上做任何事情, Git 都会使用那些信息。)

git config --global user.name "me"
git config --global user.email icandoitbetter@163.com

Step2:检查配置信息。设置好用户名和邮件地址后,可以用下列命令查看配置的信息。

git config --list

2. 获取Git本地仓库

情景一:自己新建一个项目(以Win10系统为例)

Step1:初始化本地仓库。初始化仓库后,当前工作目录下会有一个.git文件。

cd D:MyProjectGitStudy  #选择工作目录;
git init                  #初始化仓库;

Step2:添加项目文件。例如,可以在初始化好的空的本地仓库创建一个README.md文件,再加入一个bin目录和一个src目录。

echo "# GitStudy" >> README.md        #创建一个`README.md`文件
git add --all                         #将创建好的文件添加到暂存区,并跟踪(track)这些文件;
git commit -m 'initial version'       #将暂存区的文件提交到本地仓库,并备注:'initial version'

程序员Git使用心得,只能帮你到这里了

程序员Git使用心得,只能帮你到这里了

情景二:为某个项目贡献自己的一份力(以Win10系统为例)

#将用户'TheAlgorithms'的'Python'远程库的项目克隆到本地仓库,并将该项目自定义为'myPython';
git clone https://github.com/TheAlgorithms/Python.git myPython

Git 支持多种数据传输协议。 上面的例子使用的是https协议,不过你也可以使用 SSH 传输协议,SSH协议的格式为:user@server:path/to/repo.git。

3. 记录每次更新到仓库

添加文件。假设添加了一个名为hello.cpp的文件到项目中的src分目录下,则通过以下操作将新增内容更新到仓库。

git add src/hello.cpp #将该`hello.cpp`文件添加到暂存区,并跟踪(track)该文件;
git status            #查看当前已暂存且待提交的文件和还未暂存(untracked)的文件;
git commit -m 'version 1.0.0: Add hello.cpp'  #提交至本地库,并加备注;

程序员Git使用心得,只能帮你到这里了

移除文件。如果想移除上述添加的hello.cpp文件,则通过以下操作将新增内容更新到仓库。

rm src/hello.cpp        #先删除该文件;
git rm src/hello.cpp    #再删除该文件在本地库的记录,不让Git继续对其跟踪;

4. 查看提交记录和撤销操作

可以使用git log命令和git reflog查看提交历史。

me@LAPTOP-0EQDNUEB MINGW64 /d/MyProject/GitStudy (master)
git log
commit d1b5ad37d697cd4906af1646fb52d4de16124c52 (HEAD -> master) #最近一次提交的commit id;
Author: Me <1572952478@qq.com>
Date:   Sun Oct 18 10:04:59 2020  0800
version 1.0.0: Add hello.cpp          #最近一次提交的提交备注;
commit 63a0bb0caaf03715455f93542ef2cad6d7bd5d79 #上一次提交的commit id;
Author: Me <1572952478@qq.com>
Date:   Sun Oct 18 10:00:10 2020  0800
initial version        #上一次提交的提交备注;
me@LAPTOP-0EQDNUEB MINGW64 /d/MyProject/GitStudy (master)
git reflog
d1b5ad3 (HEAD -> master) HEAD@{0}: commit: version 1.0.0: Add hello.cpp
63a0bb0 HEAD@{1}: commit (initial): initial version

可以通过git reset命令撤销对文件的修改。

git reset HEAD^       #回退到上一个版本;
git reset 63a0bb0     #也可以回退到指定版本,例如:回退到commit ID为63a0bb0开头的这个版本;

5.使用远程仓库(以GitHub为例)

远程仓库可以是自己搭建的服务器,也可以是GitHubGitee等远程库,这里以GitHub为例。

首先在GitHub上注册并登录自己的账户,新建一个Repository。

程序员Git使用心得,只能帮你到这里了

添加远程仓库(以https://github.com/icandoitbetter/GitStudy.git为例)并命名为origin。

git remote add origin https://github.com/icandoitbetter/GitStudy.git

重命名当前分支为main

git branch -M main

将当前(main)分支上的内容上传到刚刚添加的origin远程库。

git push -u origin main

或者也可以这样,上传到远程库的指定分支:

git push origin main:mybranch  #将本地main分支的内容上传到origin远程库的mybranch分支;

查看当前已添加的远程库(库名称和对应的URL)。

git remote -v
origin  https://github.com/icandoitbetter/GitStudy.git (fetch)
origin  https://github.com/icandoitbetter/GitStudy.git (push)

origin远程库拉取该远程库有但你的本地库没有的内容。

git fetch origin

也可以这样,从远程库origin拉取并合并你的本地库没有的内容:

git pull origin

移除origin远程库。

git remote remove origin

程序员Git使用心得,只能帮你到这里了

程序员Git使用心得,只能帮你到这里了

6.Git分支

在开发一个项目时,开发人员可通过创建分支的方式在该分支上实现某个新功能修复某个问题,在该分支上完成任务后再将成果合并到主分支上。

新建分支,并命名该分支为:mybranch

git branch mybranch       #创建mybranch分支;
git checkout mybranch     #切换到mybranch分支;

也可采用下面这种形式。

git checkout -b mybranch  #创建并切换到mybranch分支;

mybranch分支完成任务后,该分支的内容合并到主分支(即main分支)。

git checkout main     #切换到main分支;
git merge mybranch    #将mybranch分支的内容合并到当前分支;

最后可删除mybranch分支。

git branch -d mybranch

程序员Git使用心得,只能帮你到这里了

程序员Git使用心得,只能帮你到这里了

程序员Git使用心得,只能帮你到这里了

使用rebase命令将其他分支的内容合并到主分支上来

例如:假设当前分支结构如下(main分支为主分支,mybranch分支为其他分支):

程序员Git使用心得,只能帮你到这里了

现在要将mybranch分支的内容合并到main分支上来,先使用rebase命令进行变基操作,再使用merge命令进行快速合并,可以使提交日志显得简洁清晰:

Step1:使用rebase命令将mybranch分支的当前版本的父节点变成main分支的头节点

git rebase main

程序员Git使用心得,只能帮你到这里了

Step2:使用merge命令将mybranch分支合并到main分支

git checkout main
git merge mybranch

程序员Git使用心得,只能帮你到这里了

(PS:合并时产生了冲突,由于冲突内容位于同一个文件的同一处代码,所以只能进行取舍后再合并,最后合并成功)

程序员Git使用心得,只能帮你到这里了

冲突内容如下:

程序员Git使用心得,只能帮你到这里了

7. 几种使用Git的项目开发工作流程

情景一:集中式工作流

多名开发者从中心仓库克隆代码下来,并同时作一些修改。工作完成后,除了第一个开发者可以顺利提交外,其他后边提交的开发者都必须将前一个提交的开发者的工作与自己的工作合并后,才能完成提交。

或者各自开发者在自己本地创建自己独立的分支,然后写完代码后,先本地git pull远程的代码,然后切到main分支,将自己的分支合并到main,然后提交。

情景二:集成管理者工作流

例如,在GitHub上参与某个开源项目的开发,你先将该开源项目克隆到本地,你的开发工作完成后,可以申请该项目维护者将你的工作成果合并到其维护的开源项目中。工作流程如下:

  1. 项目维护者推送到主仓库。

  2. 贡献者克隆此仓库,做出修改。

  3. 贡献者将数据推送到自己的公开仓库。

  4. 贡献者给维护者发送邮件,请求拉取自己的更新。

  5. 维护者在自己本地的仓库中,将贡献者的仓库加为远程仓库并合并修改。

  6. 维护者将合并后的修改推送到主仓库。

情景三:主管和副主管工作流

例如,开发一个需要数百人协同参与的超大型项目时,项目设一名主管,根据项目的开发需要,每个开发模块设置一名副主管,每个副主管下属若干名开发者协同完成该模块的开发。工作流程如下:

  1. 普通开发者在自己的主题分支上工作,并根据master分支进行变基。 这里是主管推送的参考仓库的master分支。

  2. 副主管将普通开发者的主题分支合并到自己的master分支中。

  3. 主管将所有副主管的master分支并入自己的master分支中。

  4. 最后,主管将集成后的master分支推送到参考仓库中,以便所有其他开发者以此为基础进行变基。

总结总结一下:

1. 使用Git将自己的项目成果按提交版本依次保存并上传远程库的操作顺序分为:暂存git add->提交git commit->上传git remote

2. 从远程库下载一个完整项目到本地采用:克隆git clone

3. 将远程库上有的但你没有的内容合并到本地库采用:拉取git fetch拉取并合并git pull