软件下载地址
https://gitforwindows.org/ Git
https://code.visualstudio.com/ vscode
查看git版本
git --vension 看git版本
配置用户名和邮箱
# 这里是声明全局的名字
git config --global user.name ‘自己的名字’
git config --global user.mail ‘自己的邮箱’
查看全局配置
cat ~/.gitconfig #就可以查看全局配置文件了.
.gitconfig里记录的就是上面声明的邮箱和名字
vim .gitconfig 可以编辑这个文件 (要在家目录里执行这个命令)
编辑完后,esc退出 -> shift+; -> wq 保存并退出
git config user.email '228654416@qq.com'
git config user.name 'haima'
git config --global core.autocrlf true # Git 如何让Git完全忽略换行符 参考文档:https://geek-docs.com/git/git-questions/45_git_how_can_i_get_git_to_truly_ignore_line_endings.html
ls -a
cat config
这样在git文件夹里就声明了当前仓库的用户信息
新建版本库
在git文件夹里输入 git init 在你要新建版本库的文件夹里创建一个初例化的仓库
在干净的文件夹里输入命令 `git init 项目名称`
建好文件后就会有一个.git的隐藏文件,如果把它删除了,就会断开git的连接,所有的版本控制记录就都没有了
clone 线上已经有的项目时
在干净的文件夹里输入命令`git clong 加https`里的仓库地址
或者ssh连接时
` git clone ssh://git仓库地址:端口号/haimait/learn.git`
例:`git clone ssh://git@github.com:端口号/haimait/learn.git`
git clone -b 6.0 https://gitee.com/thinkcmf/ThinkCMF thinkcmf6
克隆 6.0分支的代码,下载后改文件夹名为thinkcmf6
查看远程仓库信息
git remote
git remote -v # 此命令可显示更详细信息
git fetch remote # pull 关联仓库的代码再本地
关联远程仓库
git remote add origin 创建地址 # 自己的git项目地址 将本地仓库与远程仓库关联
删除远程仓库联系
git remote remove origin
git的基本工作流程
提交代码的流程:
本地编辑完后,add. 添加到运输车,然后再commit -m "操作说明" 到本地的版本仓库
然后再git push到线上的代码仓库里.
工作流程
touch a.php 新建文件,
git add a.php 放入小推车
git status 查看工作环境:
有红色的文件,就是没有提交到运输车里的文件,没有版本控制的文件
vim b.php > i > 输入文字 > shift+; > wq
git status 查看工作环境:
绿色的文件,就是已经放到运输车里的的文件,但是也是没有版本控制的
有红色的文件,就是没有提交到运输车里的文件,没有版本控制的文件
git add b.php 把b.php文件也放入小推车里.
git add . 是一次把所有的文件都放入到小推车里
git status 查看工作环境,此时都是绿色的文件了,说明都放入到小推车里了.
git commit -m '提交说明' 把小推车里的文件提交到本地仓库里.
git status 查看此时工作环境就是干净的了.
此后再修改完文件后,重复上面的步骤,提交到本地仓库里.
gitignore
vim .gitignore 新建忽略配置文件
在.gitignore文件里添加规则,
.idea
.vscode
*/.DS_Store
*.txt 忽略所有的.txt格式的文件,忽略后add . 命令就是不会提交到小推车里.
!a.txt 除了a.txt文件不忽略.
/vendor/*.php 忽略vendor目录里的.php格式的文件
/vendor/* 忽略vendor目录里的所有文件
/vendor/**/*.php 忽略vendor目录及子文件里的所有.php格式的文件
/vendor 忽略vendor的文件夹.
线上的代码仓库一般大概会给一个G左右的空间
在git里如果是空文件夹默认不会跟踪.
git status也是看不到的,所以文件夹里必需有文件,并且文件没有被忽然的,才能被提交小推车里.
mkdir vendor 建新vendor文件夹,
touth vendor/a.txt 在vendor文件夹里新建a.php文件
git status 如果vendor没有被.gitignore忽略,就可以看到vendor文件夹了.
删除仓库里的文件
1.删除仓库里的文件,本地的文件同时也会被删除
如果有些文件错放入仓库里的了,想要称除它.
git rm a.txt 这样本地和代码库里的文件就都会被删除.(默认本地和仓库里的代码应该是同样的).
![](https://img2018.cnblogs.com/blog/1441611/201903/1441611-20190301071425638-810451420.png)
2.只删除仓库里的vendor/b.php,本地的vendor/b.php保留
git rm --cached ./vendor/b.php
git rm --cached -r vendor 只删除仓库里的文件,本地的vendor保留
git status 查看本地的vendor文件夹会被跟踪,认为没有在版本里
更多参考文档:
https://www.cnblogs.com/nayek/p/12289358.html
删除暂存区(提交车)里的文件
当文件提交到暂存区,还没有commit时,发现文件提交错了
可以把文件撤消回来
git reset --hard HEAD^ 表示回退到上一个版本
git reset HEAD a.php //只撤消a.php
git reset HEAD * //撤消所有
git checkout -- c.php //还原c.php到最初状态(没有修改之前的状态).
git reset hard 864b3c6 //恢复到864b3c6版本
git push -f //强制推送本地分支到关联的远程分支上,用于回退版本后,撤消远程分支里的提交
查提交的日志
git log //看提交信息
git log -p //看提交的详细信息
git log -p -1 //看最后一次提交的信息.
git log -p 2 //看最后二次提交的信息.
git log --oneline //看简短的文件变化信息
git log --oneline -p //看简短的详细点的文件变化信息
git log --name-log //查看文件的发生变化
git log --name-status //查看文件发生了什么变化,是add 还是删除了
git log --name-only 看最近提交的文件
git reflog //查看简短提交信息
git log --stat // 查看提交的详情
git命令全局别名
git config --global alias.a add . //给add . 启个a别名
其实操作的就是家目录里的.gitconfig文件.
我们可以直接去到家目前里用vim修改它
cd 回车
vim .gitconfig
[alias]
a = add .
c = commit //没有添加-m,所以直接git c时会自动进入vim编辑提交的说明
l = log
s = status
保存退出
系统Alias
在家目录里 ls -a
可以看到 ~/.bash_profile 文件,
在它里面写上,此时就定义了系统别名,之前定义的全局依然生效
alias gs="git status"
alias gc="git commit -m "
alias gl="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit "
alias gb="git branch"
alias ga="git add ."
alias go="git checkout"
标准的分支操作工作流
分支的原理
分支的常用命令
当开发新功能时可以新建分支,在分支里开发完成后,把最终版再合并到master上,测试没有问题了,就可以pull到服务器的主要线了
查看分支
git branch //查看本地的分支
git branch -a //查看所有分支(本地加线上)
git branch -vv // 查看本地关联的分支
创建本地分支
git branch ask //创建ask分支(就是基于当前所在分支的代码复制到到ask分支上)
切换分支
git checkout ask //切换到ask本地分支
在ask分支上操作的代码不会影响到master分支,它们是各自独立的
git checkout -b bbs //基于当前分支,创建并切换到bbs分支上
git checkout -b bbs master //基于本地的master分支,创建并创建并切换到bbs分支上
git checkout -b master_editcode origin/master_editcode //基于远程仓库origin/master分支,创建并切换到本地master_editcode,并且和远程分支做关联
-b该命令主要加了一个可选参数B,如果已经存在了同名的分支,使用 git checkout -b <new_branch>会提示错误,加入-B可选参数后会强制创建新分支,并且会覆盖原来存在的同名分支。
注意:上面是老版本的命令,创建分支和撤销都用checkout容易分不清,因此新版本创建分支推荐用switch
git switch -c dev 创建并切换到dev
git switch dev 直接切换到已有的dev分支
合并分支
当bbs分支的代码开发完后,切到master主分支上
git merge ask //合并ask分支的代码到当前所在主分支上
git merge origin/master //合并origin/master分支的代码到当前所在主分支上
当前分支直接合并已提交并推送到远程的记录号,只合并提交的内容
git cherry-pick d43f469a263a42c5b812e53ebcb0fff495af9e30
解决冲突问题
当两个分支(这里以ask和bbs两个分支为例),都修改了同一个文件时,他们都合并到到master主分支上时,
就会产生冲突,此时就会在解决冲突的状态下.按提示手动修改冲突的文件.再重新提交到仓库里.
git status 查看冲突的文件
git merge --abort 放弃本次合并
查看已经合并的分支
git branch --merged //显示分出来的所有分支里面的代码都是一致的.
查看没有合并的分支
git branch --no-merged //此时就举看到没有合并的分支
删除分支
git branch -d bbs //删除bbs分支(如果是没有合并的分支是删除不了的)
git branch -D bbs //大D可以强制删除没有合并的分支(慎用大D)
git push origin --delete 删除远程分支的名字
查看本地分支和远程分支的跟踪关系
git branch -vv
比如输入
$ git branch -vv
develop 08775f9 [origin/develop] develop
feature_1 b41865d [origin/feature_1] feature_1
* master 1399706 [my_github/master] init commit
develop分支跟踪origin/develop
feature_1分支跟踪origin/feature_1
master跟踪了my_github/master,且当前分支为master分支
更多参考文档:
https://www.cnblogs.com/mafeng/p/10137244.html
查看远程库
git remote -v
# 命令来把远程dev分支拉到本地
git fetch origin dev
推送数据到远程仓库
git push -f //强制推送本地分支到关联的远程分支上,用于回退版本后,撤消远程分支里的提交
本地关联远程分支
例:使用场景:远程仓库里已经有dev代码 本地也有dev代码 但是还没有添加上关联
git branch --set-upstream-to=origin/远程要关联的分支名 本地分支名称
git branch --set-upstream-to=origin/dev dev
git push --set-upstream origin ask
本地ask分支创建远程ask分支,并关联远ask程分支,并推关本地ask分支代码送到远程ask分支上
管理远程分支
1、查看项目的分支们(包括本地和远程)
命令行 : $ git branch -a
2、删除关联的远程分支
git remote remove origin
3、删除本地分支
$ git branch -d <分支的名字>
$ git branch -d ask
$ git branch -D ask //强行删除没有合并的ask分支
4、删除远程分支
命令行 : $ git push origin --delete <BranchName>
例1: $ git push origin --delete feature/ljy-2019-10-17
4、查看删除后分支们
命令行 : $ git branch -a
暂存区
1.查看暂存区列表
git stash list
2.保存到暂存区
git stash save "save message" //执行存储时,添加备注,把已经add.到运输车里的文件(还没有commit),保存到暂存区
当编辑完文件后,没有 `add .` 添加到提交车里前,或者没有commit前,不许切换到别的分支的.
此时可以先保存到暂存区里,再切换到别的分支,把别的分支里的事件处理完后,
再回到此分支里恢复暂存后,再删除暂存就可以了.
3.显示做了哪些改动
git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
git stash show -p : 显示第一个存储的改动内容,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
4.恢复暂存区
git stash apply
恢复暂存区后,暂存区里的文件依然存在,需要手动删除
默认使用第一个存储,即stash@{0},
如果要使用其他个,`git stash apply stash@{$num}` , 比如第二个:`git stash apply stash@{1}`
5.`git stash pop`命令恢复之前缓存的工作目录,将缓存堆栈中的对应 `stash` 删除,并将对应修改应用到当前的工作目录下,默认为第一个 `stash` ,即 `stash@{0}` ,
如果要应用并删除其他 `stash`,命令:`git stash pop stash@{$num}` ,
比如应用并删除第二个: `git stash pop stash@{1}`
6.删除暂存区
git stash drop stash@{0} //丢弃stash@{$num}存储,从列表中删除这个存储
git stash clear :删除所有缓存的stash
注意 :git stash
在各个分支之间是通用的,不同分支缓存的代码可以保存到另外的分支上。
注意:git stash pop
默认会恢复上一个,即第一个 stash@{0}
缓存的内容。建议使用 git stash pop
之前先使用一下 git stash list
查看一下,然后使用 git stash pop stash@{x}
。
标签
基本操作
git tag //看标签列表
git tag 1.0 //把当前代码打上1.0的版本
git tag 2.0 //把当前代码打上2.0的版本
当完成一个功能模块后(测试稳定了),想要发布后,可以打上标签.
git tag -a tagName -m "my tag" //带备注的tag -a 标签名 -m 描述信息
git show tagName //查看tag详细信息
推送标签
git push origin [tagName] //将tag同步到远程服务器
git push origin --tags 推送所有标签到远程
删除远程标签:
git tag -d v0.1.2 //删除本地tag标签
git push origin :refs/tags/v0.1.2 //删除远程tag标签
基于tag创建新的分支
git branch newbranch newbranchv1.0 //会基于tag newbranchv1.0创建新的分支newbranchv1.0
切换到新的分支
git checkout newbranch
如果要在 tag 代码的基础上做修改,你需要一个分支:
git checkout -b new_branch_name tag_name
例:fix_tag_main-v2.20.0:新的分支名 main-v2.20.0:仓库中的tag名称
git checkout -b fix_tag_main-v2.20.0 main-v2.20.0
更多详情:
https://www.jianshu.com/p/cdd80dd15593
生成zip代码发布压缩包
git archive master --prefix='haima/' --form=zip > haimamaster.zip
此时会把所有master主分支里的文件放在haima文件夹里,然后压缩成haimamaster.zip文件
rebase
git rebase master //把指针指向在master的最新提交点
场景,在master主分支创意ask分支,当ask分支改变内容后commit时,同时master主分支的内容也改变了,
此时在master主分支上合并ask分支的代码就会产生冲突.这时只能由master管理来解决冲突问题了.
这样是不合理的.
解决方式:
当ask分支改变内容后,添加->提交
git add .
git commit -m 'edit ask' #或都git stash先缓存当前修改 rebase后,再释放缓存
git rebase master //把指针指向在master的最新提交点 再合并master代码到当前分支 ,如果有冲突,在ask上解决冲突,再commit
git checkout master 再切到master主分支上
git merge ask 此时就不会再产生冲突了
# 压缩提交记录 如果有多次提交记录了,希望压缩到一次
git rebase -i 日期的id #日志的id多写一个版本的日志id(可以用git log查看)
或者
git merge -i HEAD~~ #合并最近两次提交记录
git merge -i HEAD~3 #合并最近三次提交记录
下面的改为pick 改为 s # 表示最近的提交记录信息都合并到最早第一次提交记录中
alt + x #退出编辑模式
shift +:#进入命令行交互模式
wq 回车 #保存并退出
此时会自动进入,编辑提交信息编辑器
编辑提交记录再保存并退出
到此3次提交记录,已经压缩成了一条
最后强制把合并后的结果推送到远程仓库
git push -f
或者直接使用goland IDE操作压缩提交记录
选择需要提交的记录,选择压缩
编辑提交记录–> ok
到此已经压缩成功
rebase记录图
创建新仓库(github上)
这里有两种方式:
1.本地已经有项目代码时,在线上创建一个干净的没有提交的项目.
关联远程
创建本地库并完成初始提交
echo "# hd-xj" >> README.md
git init
git add README.md
git commit -m "first commit"
添加远程仓库
git remote add origin git@github.com:houdunwang/hd-xj.git
查看远程库
git remote -v
# 删除关联的远程分支
git remote remove origin
# 命令来把远程dev分支拉到本地
git fetch origin dev
推送数据到远程仓库
第一次推送数据到线上仓库,线上仓库里没有当前推送的这个新分支,需要加-u,(这时就会在线上新建这个分支,推并关联它)
git push -u origin master
第二次再推送数据时
git push 即可
删除远程仓库关联
git remote rm origin
2.本地没有代码时,把线上的代码 用`git clong 项目ssh地址` 命令克隆到本
通过 clone 克隆的仓库,本地与远程已经自动关联,上面几步都可以省略。
生成秘钥
使用ssh连接Github发送指令更加安全可靠,也可以免掉每次输入密码的困扰。
在命令行中输入以下代码(windows用户使用 Git Bash)
` ssh-keygen -t rsa -C “YOUR_EMAIL@YOUREMAIL.COM”`
一直按回车键直到结束。系统会在~/.ssh 目录中生成 id_rsa和id_rsa.pub,即密钥id_rsa和公钥id_rsa.pub。
把公钥放到线上的仓库里,就ok了.
详细参考:
`https://cloud.tencent.com/developer/article/1343014`
向GitHub添加秘钥
修改关联的远程仓库
clone https 的方式下载的代码,配置公钥后,pull/push数据还是要输入账号密码
解决方法:
vim .git/config
url = https://gitee.com/haima1004/layhm.git 替换为
url = git@gitee.com:haima1004/layhm.git
测试是否配置成功
完成后可以在命令行测试是否配置成功,首次建立链接会要求信任主机
ssh -T git@github.com //github
ssh -T git@gitee.com //码云
在服务器添加完公钥后报错sign_and_send_pubkey: signing failed: agent refused operation
haima@haima-PC:~/go/src/haimait/gin_web$ ssh -T git@github.com
sign_and_send_pubkey: signing failed: agent refused operation
Permission denied (publickey).
haima@haima-PC:~/go/src/haimait/gin_web$ eval "$(ssh-agent -s)"
Agent pid 25192
haima@haima-PC:~/go/src/haimait/gin_web$ ssh-add
Identity added: /home/haima/.ssh/id_rsa (/home/haima/.ssh/id_rsa)
haima@haima-PC:~/go/src/haimait/gin_web$ ssh -T git@github.com
Hi haimait! You've successfully authenticated, but GitHub does not provide shell access.
代码管理
pull 拉取代码
拉取远程主机某个分支的更新,再与本地的指定分支合并。
克隆完线上的仓库下来后,本地只有一个master
1.git pull origin ask:ask
此时本地就把线上的ask分支的代码也拉取下来了,本地就是ask分支了
2.拉取origin主机的ask分支与当前分支合并 git pull origin ask
3.如果远程分支与当前本地分支同名直接执行 git pull
push 提交代码到远程仓库
提交代码到远程仓库
第一次推送是要加上-u,可以把本地的master和远程的master关联起来,方便以后的推送或者拉取
git push -u origin mastergit push origin master #之后推送可以直接用该命令
git push #推送当前分支到远程关联的分支
提交代码之前一定要把git pull origin master //先把线上的代码更新下来
如果向远程仓库推送代码没有反应,可以清空~/.ssh 目录中的 known_hosts文件里的内容,再重新生成并添加密钥到仓库里,就可以了
修改提交的备注
把本次更改的文件合并到上次提交的日志里
把更改的文件git add . 件提交到运输车后
git commit –amend //提交到上一次提交记录中.保存退出后.就样就把本次更改的文件合并到上次提交里了.
不会另创一条提交日志了git commit –amend –author “提交人姓名 邮件@qq.com”
更多常用操作:
https://blog.csdn.net/wangdawei_/article/details/124483833
vscode中使用视频教程:
克隆仓库:git clone git地址
初始化仓库:git init 7:45
添加文件到暂存区:git add -A 11:27 图形操作 14:50
把暂存区的文件提交到仓库:git commit -m 提交信息 12:13 图形操作 15:10
查看提交的历史记录:git log --stat
工作区回滚某个文件:git checkout filename
工作区回滚所有修改过的文件:git checkout .
撤销最后一次提交:git reset HEAD^1 20:17 图形操作 21:05
图形化操作在 COMMITS工作区里->提交记录里-->右键-->Undo Commit
以当前分支为基础新建分支:git checkout -b branchname 23:50
列举所有的分支:git branch 32:27
单纯地切换到某个分支:git checkout branchname 25:00
删掉特定的分支:git branch -D branchname 32:20
合并分支:git merge branchname 26:58
放弃合并:git merge --abort 31:57
添加远程仓库:git remote add origin 地址34:30
本地仓库改名:git branch -M main34:34
上传代码:git push -u origin main35:00
推送当前分支最新的提交到远程:git push 36:00
拉取远程分支最新的提交到本地:git pull 36:39
找开源项目的一些途径
• https://github.com/trending/
• https://github.com/521xueweihan/HelloGitHub
• https://github.com/ruanyf/weekly
• https://www.zhihu.com/column/mm-fe
特殊的查找资源小技巧-常用前缀后缀
• 找百科大全 awesome xxx
• 找例子 xxx sample
• 找空项目架子 xxx starter / xxx boilerplate
• 找教程 xxx tutorial
最后编辑:海马 更新时间:2024-12-22 19:32