先附上git命令
linux@chenxiao:~$ cd Templates/
先进入一个目录,也可mkdir新建一个目录:用于接下来初始化为git可以管理的仓库
这个目录就是所说的工作目录,指当前正在进行开发的项目的本地目录。
linux@chenxiao:~/Templates$ git init
已初始化空的 Git 仓库于 /home/linux/Templates/.git/
1. 在终端输入 git init 初始化git仓库
linux@chenxiao:~/Templates$ ll -a
总用量 16
drwxr-xr-x 3 linux linux 4096 12月 29 10:13 ./
drwxr-xr-x 38 linux linux 4096 12月 29 10:12 ../
drwxrwxr-x 7 linux linux 4096 12月 29 10:13 .git/
终端输入 ll- a查看一下隐藏文件,发现新产生一个 .git/文件。.git就是我们所说的本地仓库(版本库)
仓库(Repository)是 Git 用来存储项目历史记录和版本信息的地方。它是存储在工作目录之外的一个隐藏目录(.git文件夹)。仓库包含了项目的历史提交记录、分支、标签等重要信息
linux@chenxiao:~/Templates$ vim test12-29.cpp
创建一个新文件 test12-29.cpp 随意写点数据进去
linux@chenxiao:~/Templates$ git add test12-29.cpp
2. 终端输入 git add test12-29.cpp 将文件更改添加到 Git 的暂存区
linux@chenxiao:~/Templates$ git commit -m "first commit"
[master (根提交) 5bb74d1] first commit
1 file changed, 6 insertions(+)
create mode 100644 test12-29.cpp
3. 输入 git commit -m " " 它用于将更改提交到本地仓库(注释内容随便写,一般写我们本次提交的目的,修改了哪里) 根提交就是第一次初始提交
linux@chenxiao:~/Templates$ git status
位于分支 master
无文件要提交,干净的工作区
4. 输入 git status 查看当前分支的状态,这将显示您当前工作目录与仓库的差异,例如哪些文件已被修改、哪些文件已被添加到暂存区、哪些文件已被删除等等。
上述的输出代表 :目前没有进行任何修改或添加操作,或者所有的修改和添加操作都已经成功提交到本地仓库中了。
linux@chenxiao:~/Templates$ vim test12-29.cpp
接下来修改下 test12-29.cpp文件。vim打开文件后,随便改动下内容。
linux@chenxiao:~/Templates$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git restore <文件>..." 丢弃工作区的改动)
修改: test12-29.cpp
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
修改之后再查看状态。输出信息表示:文件已经被修改过,但是还没有被添加到暂存区中用于下一次提交。想要再次提交,就要先 git add 先把改动的文件添加到暂存区。然后再使用 git commit
命令将更改提交到本地仓库中
linux@chenxiao:~/Templates$ git add test12-29.cpp
linux@chenxiao:~/Templates$ git status
位于分支 master
要提交的变更:
(使用 "git restore --staged <文件>..." 以取消暂存)
修改: test12-29.cpp
添加暂存区后再git status查看下状态,输出信息显示当前分支是 master
,并且工作区的 test12-29.cpp
文件已经被修改且已添加到暂存区中,可以进行下一次提交。
linux@chenxiao:~/Templates$ git commit -m "second commit"
[master 0d125d6] second commit
1 file changed, 2 insertions(+), 1 deletion(-)
接下来就可以用 git commit -m 进行提交:提交信息显示了提交的哈希值(0d125d6)、修改了的文件数目以及插入和删除的行数。
linux@chenxiao:~/Templates$ git status
位于分支 master
无文件要提交,干净的工作区
再次查看状态,显示干净的工作区。
linux@chenxiao:~/Templates$ git log
commit 0d125d65e3b506f0cd0eb787c3dfbbf841947899 (HEAD -> master)
Author: chenxiao <925678073@qq.com>
Date: Fri Dec 29 11:02:49 2023 +0800
second commit
commit 5bb74d1951d5bd7dc7ecf6afe4ffee18d882fb90
Author: chenxiao <925678073@qq.com>
Date: Fri Dec 29 10:41:00 2023 +0800
first commit
5. 版本穿越 先使用 git log
命令可以查看项目的提交历史。每个提交记录包含一些关键信息,包括提交的哈希值、作者、日期和提交消息,还可以加上--pretty=oneline
参数得到如下输出
linux@chenxiao:~/Templates$ git log --pretty=oneline
0d125d65e3b506f0cd0eb787c3dfbbf841947899 (HEAD -> master) second commit
5bb74d1951d5bd7dc7ecf6afe4ffee18d882fb90 first commit
还可以用git reflog查看 ,这里不演示了,自己敲一下就知道了
使用git reset
命令,将版本回退:在使用 git reset
命令时,您需要提供一个有效的提交(commit)标识符或引用,如提交的哈希值、分支名或标签名。例如下面的 --hard HEAD^表示返回啥哪个一次提交的位置。--hard
选项时,请注意,您将不可恢复地丢失之前对代码所做的更改
linux@chenxiao:~/Templates$ git reset --hard HEAD^
HEAD 现在位于 5bb74d1 first commit
一般使用 git reset --hard 版本号 穿越到指定版本。
再次 git reflog 查看一下,发现moving to 49aa20a 说明移动了. 此时文件内容为这次提交的内容。
注:HEAD 是一个指向当前所在分支的指针,git版本控制的本质就是指针
git 分支
1.查看分支 git branch -v
linux@chenxiao:~/Templates$ git branch -v
* master 49278f6 第二次提交
2.创建分支 git branch chenxiaobranch 其中chenxiaobranch是自己起的分支名
linux@chenxiao:~/Templates$ git branch chenxiaobranch
3.切换分支 git checkout chenxiaobranch
linux@chenxiao:~/Templates$ git branch -v
chenxiaobranch 49278f6 第二次提交
* master 49278f6 第二次提交
linux@chenxiao:~/Templates$ git checkout chenxiaobranch
切换到分支 'chenxiaobranch'
linux@chenxiao:~/Templates$ git branch -v
* chenxiaobranch 49278f6 第二次提交
master 49278f6 第二次提交
切换分支后,注意 * 的位置,代表位于当前分支
4.合并分支
合并前先在chenxiaobranch分支下对文件进行修改。修改之后与master合并
linux@chenxiao:~/Templates$ git checkout master
切换到分支 'master'
linux@chenxiao:~/Templates$ git merge chenxiaobranch
更新 49278f6..3d5a58e
Fast-forward
git.cpp | 1 +
1 file changed, 1 insertion(+)
合并冲突:如果两个分支都对某个文件同位置进行了修改,并且都把修改commit提交到了本地
合并后会出现冲突。需要人为决定使用哪个为新代码内容
nux@chenxiao:~/Templates$ git merge chenxiaobranch
自动合并 git.cpp
冲突(内容):合并冲突于 git.cpp
自动合并失败,修正冲突然后提交修正的结果。
如何推送到github 远程仓库呢???前提是前面add commit 等命令都执行完。
使用 SSH 协议进行推送 ,在终端依次输入如下命令
1.git remote set-url origin git@github.com:xovt/MyRepository 本地仓库与远程仓库关联
origin
是远程仓库的名称 xovt/MyRepository 代表 git账户名/存储库名
在github中这里新建存储库
进入自己的存储库,点击绿色的code 就能看到SSH的连接地址。也可像我那样手动添加。
我是写的这个,两个都一样。区别就是后者多了.git
2.git push origin master 将本地分支的提交推送到远程仓库。origin
是远程仓库的名称,master
是要推送的本地分支 。 执行这个命令后本地提交就推送到GitHub的仓库了,这里我自己的GitHub仓库设置的就是 xovt/MyRepository
3.克隆(下载)git clone 存储库的路径(本次我用的是点击绿色Code的路径)
linux@chenxiao:~/Templates$ git clone git@github.com:xovt/MyRepository.git
正克隆到 'MyRepository'...
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 8 (delta 1), reused 8 (delta 1), pack-reused 0
接收对象中: 100% (8/8), 24.65 MiB | 3.41 MiB/s, 完成.
处理 delta 中: 100% (1/1), 完成.
linux@chenxiao:~/Templates$ ls
git.cpp MyRepository
克隆成功,查看在输入克隆命令的目录下下载,并自动创建与存储库同名的目录,包含所有文件
gitee
gitee 也是一个道理
git remote add _origin git@gitee.com:chenxiaoubuntu/onboard.git
git push _origin cxbranch