1 安装
略
2 初始化
2.1 自己新开始一个项目
新建一个文件夹/找到你的项目文件夹,cd到目标目录后执行:
git init
---------------以下是执行结果---------
Initialized empty Git repository in /xxx(这是你的目标目录)
2.2 拉取已存在项目
cd到你想放置新项目的位置后执行:
git clone xxxx(拟拉取项目的url)
---------------以下是执行结果---------
Cloning into 'server-op-salesprocess'...
...
Resolving deltas: 100% (6061/6061), done.
3 添加文件
在已初始化的项目目录下执行:
git add something.txt(这是你要添加的文件)
-------------文件内容如下------------
aa
bb
4 提交修改
Git允许进行多次操作后统一进行提交,类似于数据库的事务提交,提交前可以使用如下命令查看本次有哪些修改还未提交:
git status
---------------以下是执行结果---------
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: something.txt
可以看到,本次修改是新添加了一个文件,要提交此次修改只需执行:
git commit -m "add a file"
---------------以下是执行结果---------
[main (root-commit) 4086b9c] add a file
1 file changed, 2 insertions(+)
create mode 100644 something.txt
上面的-m "add a file"是给本次提交添加注释,如果不加这一句,那么会弹出一个文本编辑器,让你输入注释。
5 修改文件
我们将刚才的something.txt的内容进行如下修改,并且不执行commit命令:
-----原文件内容----
aa
bb
-----新文件内容----
bb
cc
git会记录修改内容,使用如下指令查看文件修改前后差异:
git diff something.txt
---------------以下是执行结果---------
diff --git a/something.txt b/something.txt
index 6ad4673..0c10089 100644
--- a/something.txt
+++ b/something.txt
@@ -1,2 +1,3 @@
-aa
+
bb
+cc
(END)
"-aa"表示新文件中没有,而原文件中有的内容;“bb"表示未修改的内容;”+cc"表示新文件中有而原文件中没有的内容。
确认修改无误后,执行如下命令提交修改:
git add something.txt // 将修改后的文件从 “工作区” 放入 “版本库的暂存区(stage)”
git commit -m "change context" // 将stage的文件提交至当前分支
需要说明的是,如果修改某个文件后不执行add命令,那么执行commit时此次修改就不会被提交。因为这次修改仍在“工作区”中,而commit只会提交已经使用add加入“stage”的修改。
PS:工作区的内容指的是直接打开文件夹查看到的内容;版本库指的是隐藏目录.git。
6 回退
6.1 普通回退
在回退之前,我们可以使用如下命令查看有哪些历史版本:
git log
---------------以下是执行结果---------
commit 9a399739a7e4a0c0333c62313d7bc2378f64b4e7 (HEAD -> main)
Author: caozhigao <caozhigao@meituan.com>
Date: Fri May 31 14:32:08 2024 +0800
change context
commit 4086b9c98b32d3bada58f8ed758dbe67060e92fc
Author: caozhigao <caozhigao@meituan.com>
Date: Fri May 31 14:03:39 2024 +0800
add a file
(END)
我们可以看到有两个历史版本,可以使用如下几个命令回退:
git reset --hard HEAD^ // 其中HEAD表示当前指针指向的版本,^表示往回1个版本,如果是往回2个版本用^^,以此类推
git reset --hard HEAD~1 // 其中~n,表示往回退n个版本
git reset --hard 4086b // 4086b是某个commit的版本号的开头的一部分,要能找到唯一那个版本,该命令同样可以用来从旧版本返回新版本
git reset --hard // 直接丢弃所有未commit的修改
6.2 软回退
软回退即保留回退节点的内容不变,但是删掉提交记录。
假设你的提交历史如下:
A -- B -- C (HEAD, current branch)
你想要将当前分支重置到 B,但保留 C 中的更改。你可以使用以下命令:
git reset --soft B
此时,提交历史变为:
A -- B (HEAD, current branch)
C 中的更改仍然保留在暂存区。
什么时候使用 git reset --soft?
更改提交历史:你可能提交了一些修改,但发现提交信息写错了或者需要重做这个提交。此时,可以使用 git reset --soft 将 HEAD 重置到上一个提交,从而沿用之前的更改内容重新提交。
合并多个提交:有时你想要将若干次小的提交合并成一个更大的提交,可以使用 git reset --soft 回退到某个提交,然后重新进行一次统一的提交。
7 删除文件
在删除文件前,先在项目中添加一个名为test.txt的文件用作等下删除用。执行如下命令删除test.txt:
git rm test.txt
git commit
8 分支
可使用如下命令来创建和切换分支:
git checkout 9a39 //首先来到一个想要进行分支的节点
git branch myBranch //创建一个名为myBranch的分支
git checkout myBranch //从当前分支切换到myBranch分支
// git checkout -b myBranch //相当于合并了上面两条命令
// 尝试在新分支添加一个文件
vi myBranchDoc.txt
git add myBranchDoc.txt
git commit
用如下命令来合并分支:
git branch // 显示所有分支,带*的表示当前所在分支
git checkout main // 切换到main分支
git merge myBranch // 将myBranch合并到main,此时main下面有了myBranch的内容
9 远程仓库
9.1 上传本地工程
当你已经在本地有一个在开发的项目,而你现在想将它同步到远程仓库:
cd 现有项目的根目录
git init
git add --all
git commit -m "任何你想要作为提示的文字"
git remote add 仓库名 你的远程仓库地址(就是clone用的那个)
push 仓库名 HEAD:master
9.2 更改远程仓库的地址
将已有远程仓库的地址:
cd 现有项目的根目录
git remote set-url 仓库名 新地址
git push 仓库名 HEAD:master
其中仓库名可以使用如下命令查找:
git remote -v
9.3 提交新修改
# 查看当前状态,有哪些文件被改了
git status
# 添加所有修改的文件
git add .
# 提交修改
git commit -m "详细描述本次更新内容"
# 推送到远程仓库
git push 仓库名 分支名
9.4 提出一个PR(Pull Request)
将一个分支的修改合并到远程的另一个分支有两种做法,假设现在修改的分支是A,需要将A合并到目标分支B上:一种是修改本地代码后更新到远程同名分支A,然后通过网页端请求合并到目标分支B,这是通过PR请求合并的流程;另一个方式可以绕过PR,即在本地分支A修改代码后,在本地切换到本地的目标分支B,然后merge修改后的分支A,最后把目标分支B推到远程分支B。
不建议使用第二种方式,因为这避开了代码审查,可能会影响代码质量。
# 1. Fork项目,然后克隆副本到本地
git clone https://github.com/your-username/repository-name.git
cd repository-name
# 2. 创建新分支
git checkout -b new-feature-branch
# 3. 进行代码修改并提交
# 进行代码修改
git add .
git commit -m "Add new feature or fix bug"
# 4. 推送分支到远程仓库
git push origin new-feature-branch
# 5. 在GitHub上创建Pull Request
# 打开你forked的项目页面
# 点击“Compare & pull request”
# 填写详细信息后点击“Create pull request”
# 6. 代码审查与讨论
# 根据反馈进行修改,在本地再次提交并推送
git checkout new-feature-branch
# 修改代码并提交
git add .
git commit -m "Address comments"
# 再次推送修改
git push origin new-feature-branch
# 7. 维护者合并Pull Request
# 维护者在GitHub上点击“Merge pull request”按钮