git的基本使用流程

本文详细介绍了Git的基本使用流程,包括版本库的创建、文件的增删改查、分支操作、合并与冲突解决,以及如何进行撤销与回退。适合初学者掌握Git的基本操作。
部署运行你感兴趣的模型镜像

关于git的基本理解

git:一种分布式版本控制系统

git保存的是每一次改动,而不是文件本身。


git有三个区:

工作区(Working Directory)

这个区就是你在电脑上创建项目的地方,文件的编辑修改都在这个区中进行。

暂存区(Stage Area)

暂存区存放的是待提交到repo的修改,当你使用git add命令时,就是把工作区的修改添加到暂存区。

版本库/仓库(Git Directory/Repository)

每次使用git commit命令,就是把暂存区中的内容全部提交到repo中。


关于分支:

新建分支默认是master。

master分支应该是一个稳定的,可用的应用,平时不在这个分支上工作。

当要添加新功能时,可从master分支新建一个分支,如feature分支,当新功能完成时,再合并到master分支上,这样,master分支始终是稳定可用的。

多人合作时,可以每个人在各自的分支上工作,时不时合并到同一个分支上,当功能完善时,再合并到master分支。

分支之间大概是这种感觉(假设A、B两个人开发):

branches

当master分支上的应用出现bug时,可以在master分支上新建一个bug分支,如issue-101,修复bug后再合并到master分支上,然后删除bug分支。

基本流程

假设你已经安装了git

以下考虑最基本的git使用流程,开发时遇到的情况很多,以下流程暂不列出删除、撤销、回退的步骤,后面再单独列出来。

暂不考虑多人合作与远程repo,后面再补充,因为了解了怎么自己玩git,也就明白怎么跟基友一起玩github了。

因此以下流程都是在本地进行,跟github啥的暂时没什么关系。

新建repo->修改文件->添加修改到暂存区->提交修改到repo->创建分支->修改文件->添加修改到暂存区->提交修改到repo->合并分支->解决冲突

创建bug分支->修复bug->合并分支

流程步骤

新建repo

在项目根目录下使用git init初始化git仓库

修改文件

我们在项目目录下新建一个hello.txt文件,里面输入内容hello world(注意不要用Windows自带的记事本创建、编辑)

然后输入git status,会看到输出了这些信息:

On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        hello.txt

nothing added to commit but untracked files present (use "git add" to track)

这边git提示我们有一个Untracked file,可以用git add <file>来添加要提交的文件。

添加修改到暂存区

按照提示,我们输入git add hello.txt把文件添加到暂存区(使用git add .添加更改过的全部文件)

再次输入git status,这次看到输出信息:

On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   hello.txt

hello.txt已经被存放到暂存区了

提交修改到repo

使用git commit -m 'add hello.txt'来提交这个文件的更改

输出信息:

[master (root-commit) 88aa3e8] add hello.txt
 1 file changed, 1 insertion(+)
 create mode 100644 hello.txt

这时候,文件的更改已经提交到repo中。

创建分支

在master分支下:

git checkout -b feature创建并切换到feature分支

创建分支是git branch feature,创建feature分支

切换分支是git checkout feature,切换到feature分支

合并分支

我们切换到feature分支,git checkout feature

打开刚才的hello.txt

把内容修改成goodbye world

然后用git addgit commit命令提交到repo中

切换到master分支,在hello.txt文件结尾加上一行hello world again,然后提交

这时候,两个分支各有一个提交(commit)

我们切换到master分支git checkout master

然后把feature分支合并到master分支上,git merge --no-ff -m 'merge feature' feature

这时候会提示有冲突:

Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.

git提示我们解决了冲突再把结果commit。

解决冲突

冲突在多人合作中应该是常有的事。

我们打开hello.txt,发现内容变成了这样

hello world
<<<<<<< HEAD
hello world again
=======
goodbye world
>>>>>>> feature

于是我们把hello.txt修改成:

hello world
goodbye world

然后提交

git add hello.txt
git commit -m 'fix conflict'
[master 40cd928] fix conflict

分支合并成功。

可以用git log --graph --pretty=oneline --abbrev-commit来查看合并的情况

*   40cd928 fix conflict
|\
| * 3cbd4df modified hello.txt
* | a40c0bc add "again"
|/
* 10fb7e4 add hello.txt

log的顺序是按时间顺序从下到上。

bug分支

假设现在master分支上发现了个bug,需要紧急修复,但你现在正在feature分支上工作

假设现在hello.txt的内容是:

hello world
goodbye world

feature branch unfinished work

现在feature分支上的功能还未完成,无法提交,但是需要修复bug。这时,就需要使用git stash保存工作现场。

于是,在feature分支上,输入git stash,看到输出信息:

Saved working directory and index state WIP on feature: 3cbd4df modified hello.txt
HEAD is now at 3cbd4df modified hello.txt

这时候,再输入git status,发现输出:

On branch feature
nothing to commit, working tree clean

现场已被保存,打开hello.txt,后面的那句feature branch unfinished work也不见了。

好,现在我们可以切换到master分支,并新建一个bug分支来修复这个bug了。

git checkout master
git checkout -b issue-101

在hello.txt中添加一行issue-101 bug fixed,提交到repo

然后切回master分支,把issue-101分支合并进来。

git add hello.txt
git commit -m 'bug fixed'

git checkout master
git merge --no-ff -m 'merge issue-101' issue-101

输出信息:

Merge made by the 'recursive' strategy.
 hello.txt | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

合并完成,然后我们回到feature分支继续工作。

git checkout feature

但是现在hello.txt里面的内容还是

hello world
goodbye world

我们需要把之前未完成的工作现场恢复过来。

使用git stash list可以查看保存了哪些工作现场:

stash@{0}: WIP on feature: 3cbd4df modified hello.txt

可以看到,这边只有一条数据,我们可以使用git stash pop来恢复这个现场。

输出的信息:

On branch feature
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   hello.txt

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (643bef60d9b9540f66675d2fe1e8d9ad9d35f4fd)

可以看到,hello.txt里面的feature branch unfinished work又回来了
并且在恢复现场后,Dropped refs/stash@{0} (643bef60d9b9540f66675d2fe1e8d9ad9d35f4fd)
删除了stash的内容。

如果有多条stash数据,可以用git stash apply来恢复,如

git stash apply stash@{0}

但是用这种方式,stash内容并不会被删除,如果要删除某条stash,用git stash drop

删除、撤销、回退

删除

删除文件

假设我们有个文件,已经commit到repo中了,需要删除。
为此,我们新建一个文本文件delete.txt来模拟这个文件,把它提交到repo中。

这时候我们可以用两种方法来删除delete.txt。

1、使用git rm delete.txt

执行这句之后,会输出一句rm 'delete.txt',这时候到工作区查看,会发现delete.txt已经不在工作区了。

输入git status,发现输出如下信息:

On branch feature
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    delete.txt

暂存区已经记录了删除delete.txt的操作,接下来只要git commit就可以把delete.txt从repo中删除了。

2、直接从工作区目录中删除delete.txt,然后git addgit commit提交修改。

删除分支

git branch -d <name>可以删除分支。

例如我们可以删除之前用来修bug的issue-101分支

git branch -d issue-101

执行后输出的信息:

Deleted branch issue-101 (was 5d97433).

git branch查看分支,输出信息中表示只剩master分支跟feature分支了。

如果要删除一个未合并的分支,默认git会报错,例如我们创建一个delete分支,在hello.txt中添加一行内容delete branch,然后进行一个commit

git checkout -b delete
git add hello.txt
git commit -m 'update delete branch'

然后切回master分支,删除delete分支

git checkout master
git branch -d delete

输出了一个error:

error: The branch 'delete' is not fully merged.
If you are sure you want to delete it, run 'git branch -D delete'.

git告诉你这个分支没被合并,如果确定要删除,使用git branch -D delete

执行git branch -D delete,成功删除。

这个操作通常用来删除做到一半后面计划不做了的功能分支。

撤销

场景:从工作区撤销

你在hello.txt中写下了新的一行:I prefer svn
这时候你还没执行git add
输入git status,会发现有个提示,(use "git checkout -- <file>..." to discard changes in working directory)

于是按照提示,执行git checkout -- hello.txt
再回去hello.txt看看,新增的那句话已经被撤销了。

实际上,git checkout所做的,就是把工作区的修改替换成暂存区的。


场景:从暂存区撤销到工作区

你在hello.txt中写下了新的一行:I prefer svn
执行了git add hello.txt,把修改添加到暂存区
这时候git会提示你,(use "git reset HEAD <file>..." to unstage)

说得很清楚了,于是我们执行git reset HEAD hello.txt

再执行git status查看,发现修改又回到了工作区。


场景:从repo中撤销

……,,,遇到这种情况,看接下来的 回退 吧

回退

概念:git中有个HEAD指针,指向当前分支的当前版本,当我们进行回退操作时,其实就是改变HEAD指针,使其指向不同的commit节点。

理解了这个概念,就知道,既然是移动HEAD指针,那我们就可以在任意commit节点间进行跳转,无论是之前的版本,还是回退到之前版本后,想要回到未来的版本,只要知道commit的id就可以跳转版本。

使用git reset HEAD --hard <commit_id>来回退。

类似10fb7e42c63586db6948f7a9221bafb32f19409d这样的就是一个commit id,也可以输入前面几位,只要跟其他id有区别就行,如10fb7e4

commit_id可以使用git reflog来查看。(使用git log不能看到回退后未来的commit id)

多人合作

看到这里,清楚了git的基本操作,包括分支与解决冲突,单人玩git应该可以了,那么多人合作,其实是类似的,处理好分支与冲突的解决,多人合作也是没问题的。

远程repo

github是目前流行的远程repo之一。具体使用就不细说了。
当对本地repo进行了修改,用git push命令推送到远程repo就行了,包括分支的改动。

如果别人对远程的repo进行了修改,或者自己在另一台电脑上进行之前的项目,用git pull拉取下来就行,这个过程中也可能遇到冲突。

几个命令

git init 初始化repo

git status 列出未被添加到暂存区与未被提交到repo的修改(经常使用这个命令,对文件的修改以及提交情况会比较清楚)

git add <file> 添加修改到暂存区

git commit -m '<msg>' 提交修改到repo,并附上说明

git push 推送到远程仓库

git pull 从远程仓库拉取更新,并与本地对应分支合并

git branch 查看本地分支

git branch -a 查看远程分支

git branch <branch_name> 创建分支

git checkout <branch_name> 切换分支

git checkout -b <branch_name> 新建并切换分支

git merge 合并分支

git stash 保存工作区工作现场

git stash list 查看stash

git stash pop 恢复最后一个stash并删除stash数据

git stash apply <stash> 恢复指定stash

git stash drop <stash> 删除指定stash

git rm <file> 将文件从工作区删除

git branch -d <branch_name> 删除分支

git branch -D <branch_name> 强制删除未合并分支

git checkout -- <file> 把修改从工作区撤销

git reset HEAD <file> 把修改从暂存区撤销到工作区

git reset HEAD --hard <commit_id> repo版本回退到某个commit

git log 查看commit历史

git reflog 查看每个操作的log

参考

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我现在需要帮助用户了解Git基本使用流程和步骤。根据用户的问题,他们之前已经询问过Git的功能和用途,现在想进一步了解具体的使用步骤。首先,我需要回顾之前的对话和提供的引用内容,确保回答的一致性和准确性。 用户提到的引用[1]中提到了创建文件夹、初始化仓库、关联远程仓库等步骤。引用[2]涉及配置用户信息和提交规范,引用[3]则包含一些git命令如git log的使用。这些内容都是构建基本流程的重要部分。 接下来,我需要整理Git基本使用流程,通常包括初始化仓库、配置用户信息、添加文件、提交更改、关联远程仓库、推送代码等步骤。同时,用户可能还关心分支管理、拉取更新和查看历史记录等操作。 需要确保步骤清晰,每个环节都有对应的命令和说明。例如,初始化仓库用git init,配置用户信息使用git config,添加文件用git add,提交用git commit,关联远程仓库用git remote add,推送用git push。此外,还要提到分支管理的基本命令,如git branch和git checkout,以及如何拉取远程更新git pull和查看提交历史git log。 另外,用户之前的问题中提到了分布式版本控制的优势,所以在回答中可以适当强调本地操作和远程协作的步骤,比如如何将本地更改推送到远程仓库,如何解决冲突等,但根据用户当前的问题,可能暂时不需要深入冲突解决,保持基础流程的简洁。 还要注意引用之前的资料,比如引用[1]中的初始化仓库和关联远程仓库的命令,引用[2]中的用户配置,引用[3]中的git log使用。确保在适当的位置添加引用标识,例如在提到配置用户信息时引用[2],在关联远程仓库时引用[1]。 最后,需要检查是否符合用户要求的格式:使用中文,行内公式用$...$,独立公式用$$...$$(虽然这个问题可能不需要数学公式),代码块用正确语法,结构清晰分点说明,相关问题部分生成相关问题。同时,用户希望回答真实可靠,所以需要确保命令和步骤的正确性。 总结步骤: 1. 环境配置:安装Git,配置用户信息(引用[2]) 2. 创建仓库:初始化本地仓库(引用[1]) 3. 关联远程仓库(引用[1]) 4. 添加与提交文件:git add,git commit 5. 分支管理:创建、切换分支 6. 远程协作:push,pull 7. 查看历史记录:git log(引用[3]) 需要确保每个步骤都有对应的代码示例,如git init,git add等,并解释每个命令的作用。同时,注意可能的常见问题,比如首次使用Git需要配置用户信息,否则无法提交。还要提到commit的规范,如引用[2]中的贡献统计依赖邮箱。 最后生成相关问题,考虑用户可能接下来想知道的内容,比如如何解决冲突,如何撤销提交,或者.gitignore的作用,这些都是Git基本流程的延伸。</think>#### Git基本使用流程与步骤详解 --- ##### 一、环境准备与配置 1. **安装Git** - 从官网[git-scm.com](https://git-scm.com/)下载对应系统的安装包 - 验证安装:`git --version` 2. **配置用户信息** Git通过用户信息标记提交记录,需全局配置(所有仓库生效)[^2]: ```bash git config --global user.name "YourName" git config --global user.email "your@email.com" ``` - 查看配置:`git config user.name` / `git config user.email` --- ##### 二、本地仓库操作流程 1. **初始化仓库** - 在项目根目录执行: ```bash git init # 生成隐藏的.git目录(版本库) ``` [引用[1]](#)中的初始化示例 2. **添加与提交文件** ```bash # 添加单个文件到暂存区 git add README.md # 添加所有修改到暂存区 git add . # 提交到本地仓库(-m附加提交说明) git commit -m "Initial commit" ``` - 提交前必须执行`git add`,暂存区机制实现精确版本控制 3. **查看与对比修改** - 查看状态:`git status` - 查看差异:`git diff` - 查看提交历史:`git log` [^3] --- ##### 三、远程协作流程 1. **关联远程仓库** ```bash # 添加远程仓库别名(如origin) git remote add origin https://github.com/user/repo.git ``` [引用[1]](#)中的`git remote add`命令示例 2. **推送代码到远程仓库** ```bash # 首次推送需指定分支映射(-u参数) git push -u origin master # 后续推送直接使用 git push ``` 3. **拉取远程更新** ```bash # 拉取并自动合并(等同于git fetch + git merge) git pull origin master ``` --- ##### 四、分支管理核心操作 1. **创建与切换分支** ```bash git branch dev # 创建dev分支 git checkout dev # 切换到dev分支 # 或合并为一条命令 git checkout -b dev ``` 2. **合并分支** ```bash git checkout master # 切换回主分支 git merge dev # 将dev分支合并到当前分支 ``` --- ##### 五、典型工作流示例 ```bash # 1. 初始化本地仓库 mkdir project && cd project git init # 2. 创建并关联远程仓库(以Github为例) git remote add origin https://github.com/username/repo.git # 3. 开发新功能 git checkout -b feature-login echo "Login page code" > login.html git add login.html git commit -m "Add login page" # 4. 推送分支到远程 git push -u origin feature-login # 5. 合并到主分支(需Pull Request或直接合并) git checkout main git merge feature-login git push ``` --- #### 常见问题解析 - **为什么首次提交需要`git add`?** Git通过暂存区(Staging Area)实现选择性提交,避免未完成修改污染版本库[^3] - **如何撤销未提交的修改?** ```bash git restore <file> # 丢弃工作区修改 git reset HEAD <file> # 取消暂存 ``` --- ##### 六、进阶技巧 1. **忽略文件配置** 创建`.gitignore`文件,添加需排除的文件模式: ``` *.log node_modules/ .env ``` 2. **标签管理** ```bash git tag v1.0.0 # 创建标签 git push origin v1.0.0 # 推送标签 ``` --- --相关问题--: 1. 如何解决Git合并代码时的冲突? 2. `.gitignore`文件的作用和配置规则是什么? 3. Git中的`HEAD`指针有什么具体作用?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值