0


Git开发工作流

1.git基础

首先在当前目录下使用

git init

初始化当前仓库

git clone 目标git仓库的ssh地址

将远程仓库所有文件克隆到本地

git log
/*commit 21e227b2a8e7049322c72030e1da307cea542c7e (HEAD -> main, origin/main, origin/HEAD)
Author: halfmelon <[email protected]>
Date:   Wed Sep 11 08:57:50 2024 +0800

    Initial commit*/

使用gitlog ,查看到当前的Head指针是指向main分支的

向当前工作区添加一个Main.cpp文件,使用

git status

可以查看当前状态为

位于分支 main
您的分支与上游分支 'origin/main' 一致。

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
    main.cpp

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

也就是目前main.cpp文件已经在工作区了,但是还没有进行跟踪,按照提示进行操作

git add .

这是将工作区所有的文件都提交到暂存区,也可以使用

git add 目标文件

来提交单个文件到暂存区,这样目前的git状态就变更为

位于分支 main
您的分支与上游分支 'origin/main' 一致。

要提交的变更:
  (使用 "git restore --staged <文件>..." 以取消暂存)
    新文件:   main.cpp

使用

git commit -m "第一次提交"

将暂存区的文件提交到本地分支中,这里-m是message的意思,为本次提交添加描述

此时,git的状态变更为

位于分支 main
您的分支领先 'origin/main' 共 1 个提交。
  (使用 "git push" 来发布您的本地提交)

无文件要提交,干净的工作区

本地分支要领先远程分支一个提交

但目前仍不能直接git push将代码之间上传,在实际的开发工作中,由于是多人合作开发,因此在上传自己的分支或代码前,还需要使用

git pull

来更新最新的代码,然后才可以使用

git push origin main

将本地分支的文件提交到远程main分支中

这个时候使用git log查看,得到

commit b858702356fcec8ae1baa0bdd28e973f52433d56 (HEAD -> main, origin/main, origin/HEAD)
Author: chenzhichao-learn <[email protected]>
Date:   Wed Sep 11 09:20:48 2024 +0800

    第一次提交

说明目前已经正常提交,将代码从工作区提交到暂存区,然后从暂存区提交到本地分支,最后上传到远程仓库分支中

2.git各阶段代码回退操作

在实际工作中,可能会存在需要更新或者抛弃旧版本代码的场景,这个时候就需要将代码文件进行回退,在不同的阶段回退的操作不一样

2.1工作区代码回退

对工作区代码进行回退比较简单,可以直接修改代码,也可以使用git checkout --文件名的方式来放弃修改

模拟对main.cpp进行修改的场景

chen@czc:~/AV_Development/Git_test/Git_test$ git status
位于分支 main
您的分支与上游分支 'origin/main' 一致。

尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
    修改:     main.cpp

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

这个时候我们想丢弃main.cpp的修改,使用

git checkout -- main.cpp

此时使用git log,发现目前状态变更为

位于分支 main
您的分支与上游分支 'origin/main' 一致。

无文件要提交,干净的工作区

2.2暂存区代码回退

当使用git add . 将文件提交到暂存区后,可以使用

git reset HEAD <file>

来取消文件的提交,这里的file是具体的文件名

2.3本地分支代码回退

当使用git commit将文件提交到本地分支后,使用git log查看日志发现

ommit b858702356fcec8ae1baa0bdd28e973f52433d56 (HEAD -> main, origin/main, origin/HEAD)
Author: chenzhichao-learn <[email protected]>
Date:   Wed Sep 11 09:20:48 2024 +0800

    第一次提交

这里已经提交了,可以使用

git reset --hard 21e227b2a8e7049322c72030e1da307cea542c7e

来将本地分支的代码版本回退,21e227b2a8e7049322c72030e1da307cea542c7e这一段数字可以理解为唯一版本号,或是指针。将版本回退到这个数字所代表的版本,也就是将HEAD指针指向这个版本。

这个时候我们再采用git log查看,会发现日志变更为

commit 21e227b2a8e7049322c72030e1da307cea542c7e (HEAD -> main)
Author: halfmelon <[email protected]>
Date:   Wed Sep 11 08:57:50 2024 +0800

    Initial commit

还可以通过 git reflog 来查看HEAD变更的记录


git reflog

21e227b (HEAD -> main) HEAD@{0}: reset: moving to 21e227b2a8e7049322c72030e1da307cea542c7e
b858702 (origin/main, origin/HEAD) HEAD@{1}: commit: 第一次提交
21e227b (HEAD -> main) HEAD@{2}: clone: from github.com:halfrmon/Git_test.git

2.4远程仓库分支代码回退

当将代码上传到了远程仓库后,这个时候不能随意进行回退,然后再上传。团队协作的环境下,可能目前其他人将他们的代码进行了上传,这个时候如果直接将代码版本回退,然后重新上传可能会导致覆盖了别人的代码(不想挨骂就少干点)

这里可以给出两个方案,一个是使用git pull将最新的代码拉取下来,然后在上面改。第二个可以确认没有人上传的时候,将代码回退,然后git push -f强制上传

3.git推送代码出现冲突

在团队协作下的情况下,假设目前有版本1,A、B两人都在这个版本基础上进行开发,A将代码版本2推送到远程仓库,此时没有问题,远程仓库版本变更为2,此时B就没有办法将他的版本3上传至远程仓库

这个时候可以使用git pull将文件进行更新,git会自动合并,如果无法进行自动合并,就需要手动进行合并操作。

4.git创建本地分支

如果不想影响本地的main分支,可以创建其他的分支

使用

git branch -r //查看远程仓库分支
git branch -a //查看本地和远程仓库的分支
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main

使用git branch -vv可以查看当前分支跟踪的远程分支

chen@czc:~/AV_Development/Git_test/Git_test$ git branch -vv
* main 3a57ae2 [origin/main] 修改代码

创建新分支、并切换到新分支

git checkout -b 新分支名

切换到一个新分支 '新分支名'

此时git log状态变更为

commit 3a57ae22ac4a481625a7b0209d39a8a964a2f38d (HEAD -> sortdev, origin/main, origin/HEAD, main)
Author: chenzhichao-learn <[email protected]>
Date:   Wed Sep 11 16:43:36 2024 +0800

但是目前只是创建了一个新分支,并没有将这个分支跟踪任何远程分支,因此目前不能进行git pull,也无法将代码推送到远程仓库

此时将分支切换到main,并可以将新分支和主分支合并

git checkout main

切换到分支 'main'

git merge sortdev

更新 3a57ae2..0e66ed4
Fast-forward
 main.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

其实这个操作就相当于直接在main分支上进行修改代码

也可使用

git push origin sortdev:main

将sortdev的代码推送到远程origin仓库的main分支中

使用

git branch -d 新分支名

删除这个分支,一定要注意,如果新分支没有和main分支进行合并,是无法删除的

5.解决本地分支合并冲突

上一节合并的时候,本地的main分支没有任何改变,因此可以很容易的就将新分支和本地分支合并,但很有可能接出现这种情况:在本地创建了一个新的分支,但是随后又切换到main分支并git

pull了,此时main分支和新分支就出现很多不同,假设此时main分支中的改动和新分支的改动是同一个文件,此时就不能进行直接合并,会出现conflict提示,此时需要手动的去进行合并操作

6.git远程分支管理

在实际的开发工作中,完成了项目的基本功能后,一般会在远程拉一个新的分支,后期的功能添加、bug修改等工作都在新分支中进行,而不会一直在main分支中进行开发,而远程新分支的创建一般是由管理员进行创建的,其他人员没有创建的权限。

现在创建了一个dev_1.1的分支,使用git pull将代码拉取

 * [新分支]          dev_1.1    -> origin/dev_1.1
已经是最新的。

chen@czc:~/AV_Development/Git_test/Git_test$ git branch -r
  origin/HEAD -> origin/main
  origin/dev_1.1
  origin/main

发现出现了一个新的分支

此时我们使用git checkout -b dev_1.1创建一个同样名字的本地分支,并让其跟踪远程的dev_1.1分支

chen@czc:~/AV_Development/Git_test/Git_test$ git checkout -b dev_1.1 origin/dev_1.1
分支 'dev_1.1' 设置为跟踪来自 'origin' 的远程分支 'dev_1.1'。
切换到一个新分支 'dev_1.1'

此时可以使用git branch -vv查看跟踪情况,发现已经跟踪到了

chen@czc:~/AV_Development/Git_test/Git_test$ git branch -vv
* dev_1.1 0e66ed4 [origin/dev_1.1] 新分支提交
  main    0e66ed4 [origin/main] 新分支提交

如果本地分支名与远程分支名不一致,此时推送远程分支代码需要变更为

git push origin 本地分支名:dev_1.1

总结

目前仅仅更新了git的基础,包含了各项的基本操作,但是跟实际的开发环境还是有点出入,后面几天将实际的工作git流总结一下吧,这也是我发的第一篇博客,勿喷

标签: git

本文转载自: https://blog.csdn.net/czc20010825/article/details/142124884
版权归原作者 杰尼憨八龟 所有, 如有侵权,请联系我们删除。

“Git开发工作流”的评论:

还没有评论