0


Git全攻略:从基础到高级协作,一站式掌握版本控制精髓

目录

🎉欢迎踏入Git的奇妙魔法世界,一场穿梭于代码海洋中的奇幻旅程即将启程!🧚‍♂️想象一下,你手中握着的不仅仅是一个版本控制系统的钥匙,而是通往无限创意与完美协作的神奇门扉!🌟

在这里,每一次commit都是一颗璀璨的星辰,在浩瀚的代码宇宙中留下你的智慧轨迹。🌌而branch,则是你的秘密花园,让你在不受干扰的天地里自由探索、大胆尝试,即使偶尔迷路,merge总能温柔地带你回归主路,拥抱变化,共同成长。🌱

别担心,即使你是编程界的小萌新,Git也会用它那温暖而强大的怀抱,一步步引导你学会时间旅行,轻松穿梭于代码的过去与未来,修复错误,优化创意,让每一段代码故事都闪耀着智慧的光芒。✨

所以,让我们携手Git,开启这场既严谨又充满乐趣的冒险吧!🚀准备好了吗?让我们一起,在代码的奇妙王国里,编织属于自己的精彩篇章!✍️

git基础指令

git add

**add操作后,.git生成暂存区index。 **

git log

可以让我们查看commit history,也会打印出commit id,方便我们调整版本。

HEAD

HEAD是一个指针,指向master。

** master里保存我们最新一次提交的git对象。**

-p:更漂亮地打印 。

上面打印了新提交的信息。

git status

git status 用来打印上一次提交之后,现在未提交的暂存区更改。

提交到暂存区之后,再次调用:

git diff

打印暂存区相对工作区的更改。

git reset

可以通过commit id实现回退和撤销回退。

git reset之后,git log只能查询出当前提交之前的修改。

那如果找不到之前的记录,该怎么回退呢?

git reflog

使用git reflog可以打印出本地的每一次提交记录。

git checkout --fllename

这个命令用于将文件

filename

恢复到它在最近一次提交时的状态,即撤销对该文件的本地修改。

HEAD代表当前版本,^代表回退的版本深度。一个^就是上一个版本。

下面两个操作是等价的,都是在工作区,暂存区提交修改,第二个一步到位 。

git rm

与上面在工作区删除文件,再commit等价,一步到位直接在暂存区删除。

git branch

git branch 用于查看、创建、删除分支、重命名分支,通过不同的命令参数实现相应的功能

默认只列出本地分支,不显示远程分支,并且在当前分支前面使用 * 标记

git branch -r

-r,--remotes: 只列出远程分支,本地分支不会显示

git branch -a

-a,--all: 查看所有分支,包含本地分支和远程分支

git branch -v

-v,--verbose: 查看本地分支及其对应的提交记录

git branch创建分支

以当前分支为起点,创建一个 dev 分支,使用前提是当前分支已有提交记录。

如图,本地有两个分支。

当前分支位置。

本地分支存储位置。

git checkout dev

切换分支

如图,分支由master切换到dev。

我们在开发不同的功能时,会创建不同的分支,如下图,分支上的修改互不影响。

git merge

在开发完想要的功能后,使用git merge合并分支。

如图,添加的aaa也同步到了master分支。

和dev分支的commit id相等。

merge冲突的情况

当两个分支对同一个文件的同一行进行了不同的修改时,Git 无法自动确定应该保留哪个版本的更改。这种情况下,Git 会标记一个合并冲突,并等待用户手动解决。

下图就是一个冲突的例子。

手动解决冲突之后再次提交:

当你在一个分支上进行了更改但尚未提交时,如果尝试切换到另一个分支,Git 可能会提示你保存或暂存这些更改。如果你选择不保存或暂存,并且直接切换到

master

分支,那么这些未提交的更改可能会以某种方式影响

master

分支。

所以在切换分支之前,最好确保你已经提交了所有更改,或者使用

git stash

命令暂存未提交的更改。

git stash

stash的内容存储在图中位置。

git stash list

用于列出所有存储(stashed)的更改

git merge --no-ff -m "merge fix_bug" fix

  • **--no-ff**代表“不要快进合并”(no fast-forward merge)。通常,当合并一个分支到另一个分支时,如果合并分支(在这个例子中是 fix)自上一次从目标分支(假设你当前在 master)分离以来没有进行过其他合并,Git 会执行一个快进合并(fast-forward merge)。这意味着 Git 会简单地将目标分支的指针向前移动到合并分支的最新提交,而不是创建一个新的合并提交。使用 --no-ff 选项会强制 Git 创建一个新的合并提交,即使可以进行快进合并。这样做的好处是保留了分支的历史信息,使得我们可以清楚地看到哪些更改是在哪个分支上进行的。
  • **-m "merge fix_bug"**:这个选项允许为合并提交指定一个消息。-m 后面跟着的是要设置的提交消息,在这个例子中是 "merge fix_bug"。这有助于我们查看提交历史时快速了解合并的目的和内容。
  • **fix**:这是要合并到当前分支的分支名称。在这个例子中,fix 分支的更改将被合并到当前所在的分支中。

git commit

将暂存区内容提交到版本库, 进入 vi 命令界面输入提交信息

git commit

将某些已被跟踪的文件提交到版本库(包含工作区和版本库)

git commit [file1] [file2] [...]

将暂存区内容提交到版本库, 无需进入 vi 命令界面输入提交信息

git commit -m [message]

跳过 git add, 将所有已被跟踪的文件更改提交到版本库

git commit -am [message]

使用一次新的commit, 替代上一次提交

如果代码没有任何新变化, 则用来改写上一次commit的提交信息

git commit --amend -m [message]

git commit -D

对于已经commit过的分支,-D强行删除。

git remote

git remote本质上是用来管理远端仓库列表的命令,这些远端仓库的信息都被保存在./git/config 文件中。

git remote -v

显示所有远程仓库。

git clone

将远程仓库的内容拷贝到本地,不能在本地仓库目录里克隆。

git push origin master:master

origin :远程,即向远程推送

master :将本地的master分支推送到远程。

:master :远程的master分支,即目的地,可省略,等价为git push origin master。

当本地分支和远程分支关联,即可直接git push。

git pull origin master

从远程仓库拉取新版本的代码,当本地分支和远程分支关联,即可直接git pull

alias

起别名

使用alias,例如给status起别名为st。

git config --global alias.st status

tag

默认给最新的提交打标签。

标签存储在下图位置。

也可通过commit id给指定提交打标签。

git tag -d

推送标签

git show

查看标签

多人协作实例

**实现方法 **

为了模拟多人协作,我使用Linux的git和本机windows 的powershell中的git作为两个用户。

master是稳定分支,我们一般不在master分支上开发。

在远程创建dev分支,然后拉取,查看。

图解

在任意文件夹中shift+右键 ,打开Powershell,clone远程仓库。

当前开发者关系

打印分支

创建分支

可以看到,本地没有dev分支,那就创建一个出来。

本地dev分支和远程dev分支建立连接。

修改并push之后,查看分支

新增加的bbb成功上传。

转到powershell,查看分支。

故技重施,关联分支。

修改file.txt。

果不其然,发生冲突。

解决冲突

冲突原因

这是因为我们本地仓库和远程仓库的修改在同一行,git不知道保留哪个。

拉取仓库 ,手动解决冲突

先拉取远程仓库。

本地文件变成下面这样,这是冲突了。

手动改成我们想要的结果。

再次push,成功。

dev分支已经修改完毕,但是master分支还没有。

同步master分支

第一种方式是将dev分支merge进master有两种选择,让本地merge远端再push,推送到远端。

第二种方式是申请PR,管理员同意之后,可以直接将远端dev直接merge进远端master

转到master分支,pull一下,保证master为最新版本。

然后轮流merge,同步成功。

最后git push。

删除分支

至此,dev分支已经没有用了,咱们卸磨杀驴删掉它就行。

标签: git c++ linux

本文转载自: https://blog.csdn.net/weixin_73534885/article/details/143460704
版权归原作者 陈大大陈 所有, 如有侵权,请联系我们删除。

“Git全攻略:从基础到高级协作,一站式掌握版本控制精髓”的评论:

还没有评论