简介
git为分布式版本控制工具,能够完成自动化的版本合并、拉去、推送、记录等,只需十几个常用命令即可完成这些操作,方便快捷,十分适合企业合作、项目管理等场景使用。
git总体分为工作区和版本库,版本库具体又分为stagez(暂存区)和master(主分支)。
安装
Linux下可以通过这个命令进行安装
1
| sudo apt-get install git
|
Windows下可以直接在官网下载安装包进行安装
MacOS下可以通过homebrew进行安装
注:下面均通过linux进行操作和演示
安装成功后,添加账户名和邮箱
1
2
| git config --global user.email "xxxxxxxx@xxx.xxx"
git config --global user.name "penciler-star"
|
初始化
创建一个文件夹git_test
初始化一个仓库
git_test文件下会生成一个.git的隐藏文件夹,这样一个仓库就建好了
简单添加一个文件到仓库中
在git_test文件夹下新建一个test.cpp文件,在linux下可以利用命令
在git_test文件夹下利用git命令完成添加至仓库
1
2
| git add test.cpp
git commit test.cpp "new cpp file"
|
其中add是将工作区文件上传至暂存区,而commit是将暂存区的文件上传至主分支
修改版本库中的文件
如将test.cpp修改为如下内容:
1
2
3
4
5
6
7
| #include<iostream>
using namespace std;
int main()
{
cout<<"hello"<<endl;
return 0;
}
|
修改后,利用如下git命令可得到结果,看出此时只是更改了工作区,暂存区和主分支暂无修改
1
2
3
4
| git status
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: test.cpp
|
但此时并不知晓更改了什么内容,利用如下git命令,即可得到具体修改的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| git diff
diff --git a/test.cpp b/test.cpp
index e69de29..4eedd22 100644
--- a/test.cpp
+++ b/test.cpp
@@ -0,0 +1,7 @@
+#include<iostream>
+using namespace std;
+int main()
+{
+ cout<<"hello"<<endl;
+ return 0;
+}
|
注:如上两个命令都是查看工作区的内容和状态
随后利用如下命令进行提交,并得到返回信息
1
2
3
4
5
| git add test.cpp
git commit test.cpp "output hello"
[master b2190b5] output hello
1 file changed, 7 insertions(+)
|
查看版本
刚刚提交了两次至版本库中,那么我们想查看这两次提交,利用如下命令,可得到两次版本修改的结果
1
2
3
4
5
6
7
8
9
10
| git log
commit b2190b5e3651ba3eb2132bc86b5799ea9d06c0c9 (HEAD -> master)
Author: penciler-star <xxxxx@xxx.com>
Date: Sun Apr 10 15:11:03 2022 +0800
output hello
commit ffda9a908310bb247967c3b2e246ce012e2e6e49
Author: penciler-star <xxxxx@xxx.com>
Date: Sun Apr 10 14:54:28 2022 +0800
new a cpp
|
回退版本
我们有时提交的文件有问题,这时需要回退到没有问题的上一个版本,此时利用如下命令,得到返回结果
1
2
3
| git reset --hard HEAD^
HEAD is now at ffda9a9 new a cpp
|
此时,利用git log,已经没有了当前的output hello版本
1
2
3
4
5
6
| git log
commit ffda9a908310bb247967c3b2e246ce012e2e6e49 (HEAD -> master)
Author: penciler-star <xxxxx@xxx.com>
Date: Sun Apr 10 14:54:28 2022 +0800
new a cpp
|
前进版本
假设刚刚只是敲错了命令,但是最新版本已经没了,如何将刚刚的output hello版本寻回?
首先我们需要查看所有提交的版本号
1
2
3
4
5
6
| git reflog
b2190b5 (HEAD -> master) HEAD@{0}: reset: moving to b2190b5
ffda9a9 HEAD@{1}: reset: moving to HEAD^
b2190b5 (HEAD -> master) HEAD@{2}: commit: output hello
ffda9a9 HEAD@{3}: commit (initial): new a cpp
|
然后利用如下命令进行版本前进:
1
2
| git reset --hard b2190b5
HEAD is now at b2190b5 output hello
|
hard后面的参数为output hello的版本号,这样就回到了最新的output hello版本了
1
2
3
4
5
6
7
8
9
10
| git log
commit b2190b5e3651ba3eb2132bc86b5799ea9d06c0c9 (HEAD -> master)
Author: penciler-star <xxxxx@xxx.com>
Date: Sun Apr 10 15:11:03 2022 +0800
output hello
commit ffda9a908310bb247967c3b2e246ce012e2e6e49
Author: penciler-star <xxxxx@xxx.com>
Date: Sun Apr 10 14:54:28 2022 +0800
new a cpp
|
放弃修改
假设刚刚工作区的文件被修改了,但是我们不想要了,则可放弃修改,如下命令可利用版本库中的内容替换工作区的内容
1
| git checkout -- test.cpp
|
假设已经被add到暂存区了,但是我们不想要了,则
1
2
| git reset HEAD test.cpp
git checkout -- test.cpp
|
假设现在commit到主分支了,但是我们不想要了,则回退版本
注:假如现在已经pull到远程版本库了,那就完了。
删除文件
如果你现在想删除某个文件,则:
1
2
3
| rm test.cpp
git rm test.cpp
git commit -m "remove test.cpp"
|
当然了,如果想撤销,则回退版本
如果还没commit,则放弃修改:
1
| git checkout -- test.cpp
|
创建分支
分支是属于多人协作管理项目时的必备技能,需良好掌握
主分支为master,下面开始创建新的分支my_branch
切换至此分支
1
2
3
| git switch my_branch
Switched to branch 'my_branch'
|
查看所有分支,当前分支前会呈现一个*
1
2
3
4
| git branch
master
* my_branch
|
合并分支
通过如下命令即可实现将两个分支进行合并
切换回主分支
分支合并
注:但是有时候合并会引发错误,此时需要在主分支下进行修改引发错误的文件,再提交即可
当然,你可以禁用fast forward,进行普通合并
1
| git merge --no-ff -m "no-ff" my_branch
|
删除分支
在合并后,如不需要更多分支,则可选择删除它
1
| git branch -d my_branch
|
如果还未合并,则可以强行删除
1
| git branch -D my_branch
|
暂存分支
如果想暂存现在的工作区,则利用如下命令行
如果想恢复工作区,则利用:
获取分支
如果想从远程库获取资源,则需要将远程库的资源克隆到本地,但此时只能获取到主分支master
如果想获取其他分支,则需要利用远程的分支来创建本地的分支
1
| git checkout -b my_branch origin/my_branch
|
更新分支
利用如下命令进行更新本地库
推送分支
如果想查看远程版本库的信息,则
进而推送分支
或者远程版本库上有其他分支,那么可以推送到这个分支
1
| git push origin my_branch
|
如果推送失败,则有可能是有冲突,则需要先获取最新的版本,然后再推送
1
2
3
| git branch --set-upstream-to=origin/my_branch my_branch
git pull
git push origin my_branch
|
图形化界面
使用github时,可以利用github desktop进行可视化操作
单纯使用git时,可以下载Sourcetree进行操作
参考信息
https://www.runoob.com/git/git-tutorial.html
https://www.liaoxuefeng.com/wiki/896043488029600
http://git-scm.com/