300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 团队协作开发工具Git超详细讲解(工作必会)

团队协作开发工具Git超详细讲解(工作必会)

时间:2021-03-24 18:06:03

相关推荐

团队协作开发工具Git超详细讲解(工作必会)

目录

一、Git常用命令

二、Git分支操作

1.什么是分支?

2.关于分支的操作

三、Git团队协作机制

四、GitHub操作

五、IDEA集成Git

六、IDEA集成GitHub

七、国内代码托管中心—码云

git基本组成框架:Workspace、Stage、Repository、Remote

Workspace:开发者工作区,当前写代码的目录Stage:暂存区/缓存区Repository:本地仓库,本地所有的提交都会保存在这里,git会保存好每一个历史版本Remote:远程仓库,服务器仓库

一、Git常用命令

1.设置用户签名

CC@LAPTOP-R4VGGC1O MINGW64 ~# git config --global user.name 用户名

文件保存在:C:\Users\CC\.gitconfig

2.初始化本地库

git init 初始化当前目录为仓库,初始化后会自动将当前仓库设置为master

3.查看本地库状态

git status

# git statusOn branch masterNo commits yetnothing to commit (create/copy files and use "git add" to track)CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)$

新建文件并输入内容

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# vim hello.txt# lltotal 1-rw-r--r-- 1 CC 197121 11 Nov 14 22:13 hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# cat hello.txthello git!

再次查看本地库状态

解释:untracked 原先没有的,新建的

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git statusOn branch masterNo commits yetUntracked files:(use "git add <file>..." to include in what will be committed)hello.txtnothing added to commit but untracked files present (use "git add" to track)

4.添加暂存区

git add文件名

这里要说明一点,当我们使用git add将文件提交到暂存区以后,我们在修改这个文件时,它跟暂存区内容是没有任何关系的!我们使用git commit提交时,它只会提交暂存区中的内容,当我们首次提交内容到暂存区后,我又修改了一下文件内容,如果想提交第二次修改,我们只需要再git add一次,然后再次使用git commit提交就可以了!

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git add hello.txtwarning: LF will be replaced by CRLF in hello.txt.The file will have its original line endings in your working directory

再次查看本地库状态,git已经追踪到了我们添加的文件,此时文件只是存在暂存区里面

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git statusOn branch masterNo commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: hello.txt

git rm --cached 文件名

从暂存区里面删除文件可采用上述命令,但是不会对工作区产生影响,文件仍然存在工作区里面!

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git rm --cached hello.txtrm 'hello.txt'

5.提交本地库

将暂存区的文件提交到本地库

git commit -m "日志信息" 文件名

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git commit -m "first commit" hello.txtwarning: LF will be replaced by CRLF in hello.txt.The file will have its original line endings in your working directory[master (root-commit) 689e0ac] first commit1 file changed, 1 insertion(+)create mode 100644 hello.txt

再次查看本地库状态

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git statusOn branch masternothing to commit, working tree clean

简单查看版本信息 689e0ac是版本号的简略写法

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git reflog689e0ac (HEAD -> master) HEAD@{0}: commit (initial): first commit

更详细的信息:git log

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git logcommit 689e0acc5cb9a374eb448a5ee4b73adf8a8b5924 (HEAD -> master)Author: chen <1424861923@>Date: Sun Nov 14 22:29:20 +0800first commit

6.修改文件内容,模拟版本更替

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# cat hello.txthello git!CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# vim hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# cat hello.txthello hello hello hello hello!CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git statusOn branch masterChanges not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: hello.txt

修改后的文件添加到暂存区

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git add hello.txtwarning: LF will be replaced by CRLF in hello.txt.The file will have its original line endings in your working directoryCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git statusOn branch masterChanges to be committed:(use "git restore --staged <file>..." to unstage)modified: hello.txt

提交到本地库

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git commit -m "second commit" hello.txtwarning: LF will be replaced by CRLF in hello.txt.The file will have its original line endings in your working directory[master 6843ece] second commit1 file changed, 1 insertion(+), 1 deletion(-)

再次查看本地库状态!

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git statusOn branch masternothing to commit, working tree clean

查看版本信息,指针指向第二个版本

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git reflog6843ece (HEAD -> master) HEAD@{0}: commit: second commit689e0ac HEAD@{1}: commit (initial): first commit

7.版本穿梭

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git reflog6843ece (HEAD -> master) HEAD@{0}: commit: second commit689e0ac HEAD@{1}: commit (initial): first commitCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git reset --hard 689e0acHEAD is now at 689e0ac first commitCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git reflog689e0ac (HEAD -> master) HEAD@{0}: reset: moving to 689e0ac6843ece HEAD@{1}: commit: second commit689e0ac (HEAD -> master) HEAD@{2}: commit (initial): first commitCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# cat hello.txthello git!

可以看到指针切换,指向了第一个版本

二、Git分支操作

1.什么是分支?

在版本控制过程中,同时推进多个任务,我们可以为每个任务创建单独的分支,使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行,对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本,分支底层其实也是指针的引用,使用分支可以同时并行推进多个功能模块的开发,提高开发效率,各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,只需要将失败的分支删除,然后重新开始即可!

2.关于分支的操作

查看分支 git branch单纯查看有哪些分支

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git branchaahot-fix* master

查看分支 git branch -v包括提交信息

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git branch -v* master 689e0ac first commit

创建分支,并切换到该分支上 git checkout -b 分支名相当于以下两条命令

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git checkout -b bbSwitched to a new branch 'bb'

创建分支 git branch 分支名

现在我们使用该命令创建一个分支:hot-fix

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git branch hot-fixCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git branch -vhot-fix 689e0ac first commit* master 689e0ac first commit

切换分支 git checkout 分支名

切换到hot-fix分支上,然后修改文件hello.txt

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git checkout hot-fixSwitched to branch 'hot-fix'CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# git branch -v* hot-fix 689e0ac first commitmaster 689e0ac first commitCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# vim hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# git statusOn branch hot-fixChanges not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: hello.txtno changes added to commit (use "git add" and/or "git commit -a")

提交hot-fix分支修改后的文件到暂存区,然后是本地库

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# git add hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# git statusOn branch hot-fixChanges to be committed:(use "git restore --staged <file>..." to unstage)modified: hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# git commit -m "hot-fix first commit" hello.txt[hot-fix 954a043] hot-fix first commit1 file changed, 1 insertion(+)CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# cat hello.txthello git!hot-fix complete!

当切换到master分支上查看文件内容时,发现文件内容还是之前的内容,也就是说hot-fix和master之间还没有建立任何联系!

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# git checkout masterSwitched to branch 'master'CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# cat hello.txthello git!

合并分支 git merge 分支名

基于当前分支,合并另外一个分支,前提是需要保证分支之间不发生冲突!

冲突产生的原因:两个分支在同一个文件的同一个位置有两套完全不同的修改,git无法决定我们使用哪一个,必须人为决定使用哪一个!

下面我们站在master分支,将hot-fix分支合并过来!然后再次查看文件内容,可以看到在hot-fix分支上所做的修改已经同步过来了!

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git merge hot-fixUpdating 689e0ac..954a043Fast-forwardhello.txt | 1 +1 file changed, 1 insertion(+)CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# cat hello.txthello git!hot-fix complete!

两个分支合并过之后,下面看一个分支冲突的演示案例:同时修改master分支和hot-fix分支中的hello.txt文件,并且都提交到暂存区和本地库,当再次站在master分支上合并hot-fix分支时,出现了冲突问题!

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# vim hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# cat hello.txtmaster test!CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git add hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git commit -m "test" hello.txt[master e8d15b7] test1 file changed, 1 insertion(+), 2 deletions(-)CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git checkout hot-fixSwitched to branch 'hot-fix'CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# vim hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# cat hello.txthot-fix testhot-fix complete!CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# git add hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# git commit -m "test" hello.txt[hot-fix b33ba3d] test1 file changed, 1 insertion(+), 1 deletion(-)CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (hot-fix)# git checkout masterSwitched to branch 'master'CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git merge hot-fixAuto-merging hello.txtCONFLICT (content): Merge conflict in hello.txtAutomatic merge failed; fix conflicts and then commit the @LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master|MERGING)$

我们也可以使用git status来查看冲突信息

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master|MERGING)# git statusOn branch masterYou have unmerged paths.(fix conflicts and run "git commit")(use "git merge --abort" to abort the merge)Unmerged paths:(use "git add <file>..." to mark resolution)both modified: hello.txtno changes added to commit (use "git add" and/or "git commit -a")

如何解决冲突问题:修改文件,打开文件之后git会将有冲突的地方(通过符号)展示出来,只需要将其修改,然后删除特殊符号、保存、提交到暂存区,最后提交到本地库(注意此时使用commit命令不能带文件名)

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master|MERGING)# vim hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master|MERGING)# git add hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master|MERGING)# git commit -m "merge test"[master 89fa447] merge testCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)$

删除分支git branch -d 分支名

如果你想删除的分支没有合并,删除分支就意味着会丢失数据,此时git无法使用-d删除,可使用-D强制删除git branch -D 分支名

三、Git团队协作机制

1.团队内协作

2.跨团队协作

四、GitHub操作

git remote -v 查看当前所有远程地址别名

git remote add 别名 远程地址(https方式/ssh方式)添加远程仓库并起别名

git push 别名 分支 推送本地分支上的内容到远程仓库

git clone 远程地址 将远程仓库的内容克隆到本地(从无到有)

不能使用别名默认情况下,从远程克隆到本地库只能看到master分支,如果要将远程的分支同步到本地可以使用:

git pull 远程库地址别名 远程分支名 将远程仓库对应分支最新内容拉取下来后与本地当前分支直接合并

4.1Github新建远程仓库

登录GitHub,打开创建仓库界面

输入远程仓库名,设置共享方式为public,点击创建

可以看到仓库已经创建好了,并且有https/ssh两个地址

4.2本机与远程仓库关联

在本机打开Git Bash命令窗口,添加远程仓库,并起一个在本机使用的别名,如下面的代码所示,我起的别名是 git-demo

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git remote add git-demo /chenstudyJava/myfirst-git-Repository.gitCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git remote -vgit-demo /chenstudyJava/myfirst-git-Repository.git (fetch)git-demo /chenstudyJava/myfirst-git-Repository.git (push)

推送本地分支上的内容到远程仓库

此时会弹出一个窗口让你登录,这里我先选择打开浏览器认证登录

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git push git-demo masterEnumerating objects: 18, done.Counting objects: 100% (18/18), done.Delta compression using up to 8 threadsCompressing objects: 100% (6/6), done.Writing objects: 100% (18/18), 1.34 KiB | 229.00 KiB/s, done.Total 18 (delta 0), reused 0 (delta 0), pack-reused 0To /chenstudyJava/myfirst-git-Repository.git* [new branch]master -> master

然后刷新远程仓库,可以看到

现在我在远程库修改hello.txt文件,增加了第四行的语句

提交

使用git pull命令将远程仓库的最新内容同步到本地git pull 远程库地址别名 远程分支名

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git pull git-demo masterremote: Enumerating objects: 5, done.remote: Counting objects: 100% (5/5), done.remote: Compressing objects: 100% (2/2), done.remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0Unpacking objects: 100% (3/3), 655 bytes | 109.00 KiB/s, done.From /chenstudyJava/myfirst-git-Repository* branch master-> FETCH_HEAD89fa447..f4b88ac master-> git-demo/masterUpdating 89fa447..f4b88acFast-forwardhello.txt | 1 +1 file changed, 1 insertion(+)CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git statusOn branch masternothing to commit, working tree cleanCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# cat hello.txttest!test!hot-fix complete!hehehehehehehehehehehehehehehehehe

4.3克隆仓库

新建文件夹git-clone,进入目录打开窗口,输入克隆命令(图中红框部分)

克隆会自动帮我们做如下3个操作:

拉取代码初始化本地仓库创建别名

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-clone# lltotal 0drwxr-xr-x 1 CC 197121 0 Nov 15 18:02 myfirst-git-Repository/CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-clone# cd myfirst-git-Repository/CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-clone/myfirst-git-Repository (master)# git remote -vorigin /chenstudyJava/myfirst-git-Repository.git (fetch)origin /chenstudyJava/myfirst-git-Repository.git (push)

添加团队成员,添加之后该成员可以push推送代码

4.4ssh免密登录

复制公钥

打开settings

添加

测试

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git pull git@:chenstudyJava/myfirst-git-Repository.git masterThe authenticity of host ' (20.205.243.166)' can't be established.RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.This key is not known by any other namesAre you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added '' (RSA) to the list of known hosts.From :chenstudyJava/myfirst-git-Repository* branch master-> FETCH_HEADAlready up to @LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# cat hello.txttest!test!hot-fix complete!hehehehehehehehehehehehehehehehehe

测试push命令

CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# cat hello.txttest!test!hot-fix complete!heheheheheheheheheheheheheheheheheCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# vim hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# cat hello.txttest!test!hot-fix complete!hehehehehehehehehehehehehehehehehessh 果然方便!CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git add hello.txtCC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git commit -m "ssh ceshi" hello.txt[master 1bd2320] ssh ceshi1 file changed, 1 insertion(+)CC@LAPTOP-R4VGGC1O MINGW64 /e/Git/git-demo (master)# git push git@:chenstudyJava/myfirst-git-Repository.git masterEnumerating objects: 5, done.Counting objects: 100% (5/5), done.Delta compression using up to 8 threadsCompressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 285 bytes | 142.00 KiB/s, done.Total 3 (delta 0), reused 0 (delta 0), pack-reused 0To :chenstudyJava/myfirst-git-Repository.gitf4b88ac..1bd2320 master -> master

远程仓库查看

五、IDEA集成Git

在C:\Users\CC目录下新建文件

复制忽略内容到git.ignore

# Compiled class file*.class# Log file*.log# BlueJ files*.ctxt# Mobile Tools for Java (J2ME).mtj.tmp/# Package Files #*.jar*.war*.nar*.ear*.zip*.tar.gz*.rar# virtual machine crash logs, see /en/download/help/error_hotspot.xmlhs_err_pid*.classpath.project.settingstarget.idea*.iml

引用忽略文件

IDEA引入

将项目交给git管理

切换到本地

文件添加到暂存区

查看版本

创建新的分支

合并分支

合并结果

六、IDEA集成GitHub

IDEA登录

分享项目到GitHub

添加信息

登录远程库查看结果

七、国内代码托管中心—码云

IDEA登录

测试push

提交

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。