2024欧洲杯投注官网下载地址:git - downloads (git-scm.com)
2024欧洲杯投注官网下载太慢的2024欧洲杯投注官网的解决方案:cnpm binaries mirror (npmmirror.com)
许多公司的代码仓库及第三方代码托管平台,使用的都是基于公钥的ssh认证方式(公钥加密,私钥解密)
git推荐使用ssh协议的原因使用ssh协议可以避免每次push输入密码。 git@github.com开头的就是ssh协议。 使用https协议则每次都要输入用户名和密码。
公钥是代码仓库服务器验证本地机器的一种身份识别方式。入职一家新公司后,公司的git服务器管理员,会要求你把你的git公钥通过邮件的方式发给它,配置好之后,以后每次向远程代码仓库提交代码,就不用输入用户名和密码啦。
这里插一句,如果感到git bash的窗口太小或者字体太小,可以自己进行调整。调整的方式是,打开git bash命令窗口后,在命令窗的标题栏,鼠标右键,然后选择options,安装下面的操作进行设置
// 窗口尺寸设置
options --> windows -->修改行数(高度) 列数(宽度)
// 窗口字体设置
options --> text -->设置字体大小
复制代码
在公司使用的话,用户名建议配置成自己的真名,这样查看代码修改者的时候,比较好找。git config命令有三种作用域。
# 对当前仓库有效
git config --local
# 对当前登录者有效,对所有仓库都有效
git config --global
# 对登录这台电脑的人都有效,对所有仓库都有效
git config --system
复制代码
如果配置项比较多,可以在这些指令后面加 -e 参数,打开配置文件进行配置。编辑完先按esc, 然后再按shift :组合键,最后在命令行输入wq保存退出
这里明显应该选择git config --global配置命令。
git config --global user.name "用户名"
git config --global user.email "邮箱地址"
复制代码
ssh-keygen 生成秘钥过程会有三次问询交互。第一次是询问生成秘钥存储路径和名称,默认存储位置是 /c/users/用户名/.ssh/id_rsa, 不想更改的话按回车键。第二和第三次是要求你输入两次私钥密码。用于查看秘钥时的认证,一次是设置密码,一次是确认密码, 如果你不想在使用密钥时输入口令,按回车跳过即可。
ssh-keygen -t rsa -c “上一步的邮箱地址”
复制代码
cd ~/.ssh && ls
cat id_rsa.pub
复制代码
登录个人或企业的git网站,在用户设置-->ssh公钥里面 ,给公钥起个有意义的名称,将生成的公钥粘贴到公钥输入框里(注意要删除公钥末尾的空白或者换行符),点击保存,就可以了。
创建步骤:
git config --local user.name "你的名字"
git config --local user.email "你的邮箱"
复制代码
ssh-keygen命令生成ssh-key密钥对文件时,需要输入文件存储路径,为不同账号起不同的名称
ssh-keygen -t rsa -c "test@126.com”
复制代码
host github.com
hostname github.com
user test@126.com
preferredauthentications publickey
identityfile /c/users/用户名/.ssh/ssh/id_rsa_github
host oschina.com
hostname oschina.com
user test@126.com
preferredauthentications publickey
identityfile /c/users/用户名/.ssh/ssh/id_rsa_github
host gitee.com
hostname gitee.com
user test@126.com
preferredauthentications publickey
identityfile /c/users/用户名/~ssh/id_rsa_gitee
复制代码
hostname是服务器的地址,user是用户名,preferredauthentications是验证方式,identityfile是私钥文件路径
分为两种情况,一种是没有仓库,一种是已有仓库,先看第一种,从零创建仓库,然后推送到远程
git init 目录名 新建一个本地仓库
git add readme.md -- 将readme.md文件加入到仓库中
git commit -m "提交描述" -- 将文件提交到本地仓库
git remote add origin "远程仓库地址" -- 添加远程仓库,origin是一个远程主机的别名,名称可以随意取,一个远程主机上可以有多个远程仓库
git push -u origin master -- 将本地仓库push到远程主机origin的master分支,并将origin设为默认远程主机 -u参数设置默认远程主机,后续push代码,不写主机名的话,就是默认主机
复制代码
git clone /path/to/repository // 克隆本地库
git clone git/ssh/http[s]/ftp[s]/file/rsync:username@ip/path/to/repository // 克隆远端库
复制代码
git clone的本质就是把git目录里面的内容拷贝过来,一般git目录里有成千上万的各种对象(提交对象,树对象,二进制对象, tag对象......),如果逐一复制的话,其效率就可想而知。如果通过git、ssh协议传输,服务器端会在传输前把需要传输的各种对象先打好包再进行传输;而http(s)协议则会反复请求要传输的不同对象。如果仓库里面的提交不多的话,前者和后者的效率相差不多;但若仓库里有很多提交的话,git、ssh协议进行传输效率更高。不过现在git对http(s)协议传输git仓库做了一定的优化,http(s)传输现在也能达到ssh协议的效率 。
如果你不清楚git add ,git commit ,git push都做了什么,那可能是因为你不知道git仓库存储区管理方式。git将本地的代码保存分为三个存储空间。
分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。在其它分支上进行开发,完成后再将它们合并到主分支上。
git branch 查看本地所有的分支
git branch -r 查看远程所有分支
git branch -vv 查看本地分支和远程分支的追踪关系
复制代码
git checkout 分支名
复制代码
git checkout -b 新分支名 // 从当前所处的本地分支下,创建一个新分支,分支名建议以 feature-yyyymmdd-开发功能概述-姓名简称,这样的格式命名
git checkout -b 新分支名 远程主机名/远程分支名 // 从远程分支创建一个新分支,并追踪远程分支
复制代码
git branch -m 旧名称 新名称
复制代码
git branch -d 分支名 // 先切换到别的分支名下,删除本地分支
git push --delete 远程主机 远程分支名 // 删除远程分支
复制代码
git merge 当前分支要合并的分支名 -m '合并备注'
git merge --no-ff 当前分支要合并的分支名 // 保留分支合并之前的历史提交记录
git merge --squash 当前分支要合并的分支名 // 将分支合并之前多次提交记录合并为一次
复制代码
git rebase -i [startpoint] [endpoint]
复制代码
其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支head所指向的commit
以合并最近三次的提交记录为例:
git rebase -i head~3
复制代码
弹出如下界面:
上面未被注释的部分列出的是我们本次rebase操作包含的所有提交,下面注释部分是git为我们提供的命令说明。每一个commit id 前面的pick表示指令类型,git 为我们提供了以下几个命令:
命令 | 说明 |
pick | 保留该commit(缩写:p) |
reword | 保留该commit,但我需要修改该commit的注释(缩写:r) |
edit | 保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e) |
squash | 将该commit和前一个commit合并(缩写:s) |
fixup | 将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f) |
exec | 执行shell命令(缩写:x) |
drop | 我要丢弃该commit(缩写:d) |
根据需要编辑完之后保存即可。
git rebase生成的历史记录线比较好看,merge比rebase有更多的历史记录,一方认为,合并分支不能仅仅为了好看,而要记录某个分支完整开发历史,一根直线的历史,很难分辨出开发历程和工作分配,如果开发过程跌跌撞撞,要进行如实记录,遍于后期改进。
另一方认为,在开发过程中,如果某个分支功能比较多, commit量比较多时,使用rebase可以将当前分支提交记录整理过后再合并回主干,这样主干的演变轨迹线会看着比较美观,比较清晰。如果项目成员对git用得比较熟练,建议使用git rebase,否则建议使用git merge,便于查看提交历史。
冲突的原因是两个不同的开发者改了相同文件相同位置的代码,冲突提示,
$ git merge conflict-branch
auto-merging index.html
conflict (content): merge conflict in index.html
automatic merge failed; fix conflicts and then commit the result.
复制代码
文件冲突,head到=======之间的是当前分支,=======到>>>>>>>之间的是冲突分支的内容,最后面是冲突分支名
<<<<<<< head
复制代码
id="footer">contact : email.support@github.com
=======
复制代码
id="footer"> please contact us at support@github.com
>>>>>>> conflict-branch
复制代码
合并冲突的原则是取最大公约数,共同的部分只保留一份,有差异的地方多方都保留 遇到冲突,难于解决,想回退到未合并之前的状态,使用
git merge --abort
复制代码
解决完冲突文件之后,要重新添加文件到暂存区和本地版本库。
另外一种场景是git pull最新的代码后,git stash pop引起冲突,想回退到最新没冲突之前的代码,使用指令
git reset --hard head
复制代码
追踪分支主要用来对比当前和远程分支的版本, 比如说origin/master分支比master多提交了两次,意味着你需要将origin/master的分支更新到master。
git branch --set-upstream-to=远程主机名/远程分支名 本地分支名(可不写,不写表示当前分支)
复制代码
在仓库根目录下新建.gitignore文件,文件名不可更改。在win系统下,不允许新建以.开头的文件或文件夹,因此需要在git bash中新建,命令如下:
cd 本地代码仓库目录
vim .gitignore
复制代码
# 以#开头的行都是注释
# 忽略*.o和*.a文件(常见的编译过程中产生的文件)
*.[oa]
# 忽略*.c和*.c文件,somefile.c除外,!用于在在某规则之后增加例外
*.[cc]
!somefile.c
# 忽略somepath文件和somepath目录
somepath
# 只忽略somepath目录,不忽略somepath文件
somepath/ # 只忽略somepath文件,不忽略somepath目录
somepath
!somepath/
# 只忽略当前目录下的somepath文件和目录,子目录的somepath不在忽略范围内
/somepath
复制代码
7.3 忽略文件的原则
7.4 忽略已经添加到远程仓库的文件 ( 如果文件重要,要提前备份)
git rm –cached xxx
git rm -r –cached
复制代码
git 切换分支时,如果当前分支的功能没有开发好,不具备提交的条件, 如果不对这些内容做暂存处理,会被带入到切换之后的分支,给代码管理带来不必要的麻烦。这时就需要对尚未开发完成的进度进行存储操作。
git stash save "备注说明" // 暂存尚未开发完成的进度
git stash list // 查看暂存进度
git stash pop stash@{1} // 恢复指定进度到工作区,stash_id是通过git stash list命令得到的,如果不指定,恢复最新的进度到工作区
git stash drop [stash_id] // 如果不指定stash_id,则默认删除最新的存储进度。
git stash clear // 删除所有暂存内容
复制代码
git add dir1 # 添加dir1这个目录,目录下的所有文件都被加入
git add f1 f2 # 添加f1,f2文件
git add -u # -u是update的缩写,只监听已经被加入的文件,包括修改和删除,不包括新增的文件和.gitignore中设置的忽略文件 添加到暂存区
git add . # 监听工作区的状态树,把工作区状态树的所有变化提交到暂存区, 包括新增的和修改的,不包括删除的文件和.gitignore中设置的忽略文件
git add -a # 等于 git add . git add -u 不包括.gitignore中要忽略的文件
git add * # 等同git add -a
复制代码
git commit -m "代码提交信息"
git commit -a -m "代码提交信息" # -a是把unstaged的文件变成staged(不包括新建的文件),然后commit
git commit --amend # 修改提交的commit(没有push)
git commit --amend -m "comment" # 修改commit注释
复制代码
git push <远程主机名> <本地分支名>:<远程分支名>
git push -f <远程主机名> <本地分支名>:<远程分支名> // 强制推送
复制代码
git push命令使用时常见的四种情况:
git push <远程主机名> <本地分支名> | 如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建 |
git push <远程主机名> :<远程分支名> | 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete 远程分支 |
git push <远程主机名> | 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到远程主机的对应分支 |
git push | 如果当前分支只有一个远程分支,那么主机名都可以省略 |
git fetch <远程主机名> <远程分支名>:<本地分支名>
git pull <远程主机名> <远程分支名>:<本地分支名> // 等于git fetch git merge
复制代码
git pull 常见的四种省略参数的情况,与git push比较类似。这里就不再赘述。git pull除了更新和自动合并当前代码之外,还有更新仓库所有分支的功能,注意是更新分支,不是更新分支上的代码。
回退命令
git checkout -- #撤销工作区修改,省略filename,就是放弃工作区所有的改动
git log --pretty=oneline --abbrev-commit #查看version_hash
git reset version_hash --[soft|mixed|hard] #本地仓库回退到某个版本
# --soft 回退commit,stage和workspace仍旧保留改动
# --mixed 回退commit和stage,git reset默认的模式,只有工作区保留改动
# --hard 回退commit stage workspace 所有的改动都会丢失
git push -f 远程主机名 远程分支 #强制远程仓库回退到本地仓库版本
复制代码
回退流程
1.备份当前分支
git checkout -b the_branch_backup
复制代码
2.本地仓库版本回退
git log --pretty=oneline --abbrev-commit #查看回退版本号
git reset --hard the_commit_id #本地仓库版本回退
复制代码
3.远程仓库回退
git push origin :the_branch //删除远程 the_branch
复制代码
4. 用回滚后的本地分支重新建立远程分支
git push origin the_branch
复制代码
5.回退成功,删除本地备份分支
git branch -d the_branch_backup
复制代码
git的版本回退速度非常快,因为git在内部有个指向当前版本的head指针,当你回退版本的时候,git仅仅是把head从指向回退版本
提交代码时提交错了分支的处理方法
git log --pretty=oneline --abbrev-commit #查看 提交之前的commit_id
git reset commit_id #本地版本库回退
git stash #暂存工作区和暂存区改动
git checkout target_branch #切换到正确的分支
git stash pop #恢复代码
git add -a && git commit - m '备注'
复制代码
(1) git reset只能针对本地操作,如果本地删除的内容已经推送到远程仓库,下一次更新时,被删除的内容会恢复。git revert可以对对远程服务器执行回退操作。下一次更新时,本地被删除的文件,不会恢复。
(2) git revert会使提交记录增多,git revert是撤销指定版本的提交,会产生一个新的提交记录,git reset会使提交记录减少,git reset是回卷,会撤销指定版本之后的所有提交记录
revert后如果不想撤销了,看一下log,reset就可以回去了。
git log # 查看commit_id
git reset --hard commit_d # 回退本地仓库,暂存区,工作区
复制代码
reset后后悔了怎么办,没有log了,怎么办? 没关系,用git reflog命令可以查到更多commit_id:
git reflog # 查看所有的命令操作记录,可以查询到git reset之前的commit_id
git reset --hard commit_id # 就可以回退会reset以前状态了。
复制代码
在git中,总是有后悔药可以吃的,git reflog 记录你操作的每一条指令,head指向的版本是当前版本,git允许我们使用命令git reset --hard commit_id在历史版本之间穿梭。穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
git cherry-pick命令的作用,就是在当前分支上,把其它分支的提交记录合并过来,这在两个版本刚开始说要一起上线,后来一个版本不上线了,而代码都搅合在发布分支,要撤销不上线的代码时,配合git reset指令,可以轻松实现发布分支不上线功能的代码下撤。
a1 - a2 - a3 - a4 a
b1 - b2 - b3 b
复制代码
现在将b2提交应用到a分支。
# 切换到 a 分支
$ git checkout a
# cherry pick 操作
$ git cherry-pick b2
复制代码
操作完成以后,代码库就变成:
a1 - a2 - a3 - a4 - b2 a
b1 - b2 - b3 b
复制代码
合并多个提交的操作指令是:
git cherry-pick
复制代码
当我们需要删除暂存区或版本库上的文件, 同时工作区也不需要这个文件了, 可以使用git rm
git rm file_path
git commit -m 'delete somefile'
git push
复制代码
当我们需要删除暂存区或版本库的文件, 但本地又需要使用, 只是不希望这个文件被版本控制, 可以使用 git rm --cached
git rm --cached file_path
git commit -m 'delete remote somefile'
git push
复制代码
推荐两条简写提交日志格式设置参数, lm-不显示提交记录汇总信息 lms-会现在提交记录汇总信息
# 提交记录hash值是红色 提交描述是蓝色 提交日期是绿色 提交者是深蓝色
git config --global alias.lm "log --no-merges --color --date=format:'%y-%m-%d %h:%m:%s' --pretty=format:'%cred%h %creset- �lue%s %cgreen(�) %c(bold blue)<%an>'"
# 有提交记录汇总信息 提交记录hash值是红色 提交描述是蓝色 提交日期是绿色 提交者是深蓝色
git config --global alias.lms "log --no-merges --color --stat --date=format:'%y-%m-%d %h:%m:%s' --pretty=format:'%cred%h %creset- �lue%s %cgreen(�) %c(bold blue)<%an>'"
复制代码
命令浅析:
--no-merges:不显示分支合并日志
%h:简短hash提交字符串
�:提交日期
%an:提交者
%s:提交说明
%c 颜色值 内容=给内容设置相应的颜色
复制代码
看看这两种风格的注释是不是看着更优雅,更舒服
在软件发布时创建标签,建一个发布版本的里程碑,是被推荐的。
#查询版本号
git log --pretty=oneline --abbrev-commit
#创建tag
git tag v1.0.0 1b2e1d63ff -m '20210123 created'
#推送某个tag到远程仓库
git push origin tag_name
# 一次性推送所有tag到远程服务器
git push origin --tags
复制代码
# 查看某个tag记录
git show tag-name
# 查看所有的tag
git tag -ln # 加-ln,查看tag简略信息
复制代码
// 取出打过tag的某个版本
git checkout -b branch_name tag_name
复制代码
#删除本地的tag命令是
git tag -d tag-name
#删除远程tag的命令是
git push origin --delete tag-name
复制代码
#镜像名称不是随意起的,要与docker配置名称对应
image: node:lts
# 要缓存的东西
cache:
key: ${ci_commit_ref_slug}
paths:
- node_modules/
- .yarn-cache/
variables:
app_name: 'alp-crm-ng'
stages:
- format
# 预处理命令
before_script:
- echo "before_script"
- node -v
- yarn -v
- yarn install --cache-folder .yarn-cache
format:
stage: format
script:
- yarn format
复制代码
git checkout 的分支不存在.git文件夹引起的
git rm -r --cached .
复制代码
3. 合并代码,推荐用如下命令,比git merge更好用。
git pull origin remote_need_merge_branch_name
复制代码
git pull --tags origin hotfix/20210707-hide-fund-rate
from gitlab.tengmoney.com:tengmoney-fe/caizhi-minipro-cscb
* branch hotfix/20210707-hide-fund-rate -> fetch_head
! [rejected] v1.2.0 -> v1.2.0 (would clobber existing tag)
复制代码
这是因为tag被删除了,又新建了一个一模一样的tag,2024欧洲杯投注官网的解决方案是,强制刷新一下远程的所有tag
git fetch --tags -f
复制代码
5. .gitignore文件中设置的忽略文件不生效的解决方法,.gitignore中设置的忽略规则,是针对未添加到版本管理的文件而言,对已添加到版本库的文件不生效。解决方法是将所有文件先从版本库删除,再重新添加一遍。
git rm --cached 要删除的xxx文件夹或文件
复制代码
6. could not retrieve the pipeline status. ---- 无法检索流水线状态。
这种报错是因为没有流水线文件所致。
原因:git工程的.git/refs目录下跟踪的某些git分支,在pull时候发现与远程仓库对应的分支refs不同,因此导致 git pull 失败
解决方法:
8. the following untracked working tree files would be overwritten by merge,
原因: 远端将某个文件加入了仓库,本地把这个文件从仓库中移除了,就会出现这样的提示。一般是同名文件,刚开始命名不规范,比如说文件名首字母大写,后面改成了小写文件。window系统不区分文件大小写,就出现这个问题。
解决方法:
方法1
git rm --cached filename
git push origin remote_branch
复制代码
方法2
git clean -d -fx "src/httptypes"
复制代码
其中 d----删除未被添加到git的路径中的文件 x---删除忽略文件 对git来说不识别的文件 f ---强制运行 ,强制合并的思路走不通。
9. git默认对文件名称大小写不敏感,如果将原来小驼峰命名的文件改成了大驼峰,会发现本地git的改动文件提示,没有任何修改。解决方法就是执行
git config core.ignorecase false
复制代码
删除之前小驼峰文件的操作指令是
git mv readme.md readme.md
复制代码
解决方法:删除重名分支 12. git checkout -b 创建新分支时,报fatal: cannot lock ref xxx
git 把分支信息存放在 .git/refs/heads 目录中,每个分支是一个文件。如果.git/refs/heads下存在同名目录,就会报这个错误。
解决方法: 从一开始创建分支时,如果要创建一个以xxx为前缀的开发名,就要创建成xxx/test1这种格式。
[1] 探秘git隐藏文件夹
[2] 图解git工作区、暂存区、版本库之间的关系
[3] git merge --no-ff是什么意思
[4] git ignore文件的设置
[5] git push 常见用法
[6] git 分支 - 分支的新建与合并
[7] git管理多个ssh密钥,git多帐号配置
[8] git 工作流程
[9] git rebase 用法小结
[10] git log命令全解析,打log还能这么随心所欲!
投稿时间:2023-03-15 最后更新:2023-03-15
本站资料均由网友自行发布提供,仅用于学习交流。如有欧洲杯线上买球的版权问题,请与我联系,qq:4156828
© 欧洲杯线上买球 copyright 2008-2023 all rights reserved. powered by 欧洲杯线上买球-2024欧洲杯投注官网