首页 git学习
文章
取消

git学习

简介

git为分布式版本控制工具,能够完成自动化的版本合并、拉去、推送、记录等,只需十几个常用命令即可完成这些操作,方便快捷,十分适合企业合作、项目管理等场景使用。
git总体分为工作区和版本库,版本库具体又分为stagez(暂存区)和master(主分支)。
1

安装

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
1
mkdir git_test
初始化一个仓库
1
git init
git_test文件下会生成一个.git的隐藏文件夹,这样一个仓库就建好了

简单添加一个文件到仓库中

在git_test文件夹下新建一个test.cpp文件,在linux下可以利用命令
1
touch test.cpp
在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到主分支了,但是我们不想要了,则回退版本
1
git reset --hard HEAD^
注:假如现在已经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
git branch my_branch
切换至此分支
1
2
3
git switch my_branch

Switched to branch 'my_branch'
查看所有分支,当前分支前会呈现一个*
1
2
3
4
git branch

  master
* my_branch

合并分支

通过如下命令即可实现将两个分支进行合并
切换回主分支
1
git switch master
分支合并
1
git merge 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

暂存分支

如果想暂存现在的工作区,则利用如下命令行
1
git stash
如果想恢复工作区,则利用:
1
git stash pop

获取分支

如果想从远程库获取资源,则需要将远程库的资源克隆到本地,但此时只能获取到主分支master
1
git clone xxxx
如果想获取其他分支,则需要利用远程的分支来创建本地的分支
1
git checkout -b my_branch origin/my_branch

更新分支

利用如下命令进行更新本地库
1
git pull

推送分支

如果想查看远程版本库的信息,则
1
git remote -v
进而推送分支
1
git push origin master
或者远程版本库上有其他分支,那么可以推送到这个分支
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/

本文由作者按照 CC BY 4.0 进行授权