이 기사는 Git을 배우고 몇 가지 일반적인 Git 명령을 요약하는 데 도움이 될 것입니다.
1. Windows-Git 다운로드 및 설치
공식 웹사이트 다운로드 주소: 다운로드하려면 클릭
공식 웹사이트 다운로드가 너무 느린 경우 해결 방법: 다운로드하려면 클릭
2 Git 공개 키 생성 및 구성 방법
2.1 공개 키의 목적
많은 기업의 코드 웨어하우스 및 타사 코드 호스팅 플랫폼에서는 공개 키 기반의 SSH 인증 방법(공개 키 암호화, 개인 키 복호화)을 사용합니다.
Git이 SSH 프로토콜 사용을 권장하는 이유: SSH 프로토콜을 사용하면 push
마다 비밀번호를 입력하는 것을 피할 수 있습니다. git@github.compush
输入密码。 git@github.com开头的就是SSH协议。 使用Https协议则每次都要输入用户名和密码。
公钥是代码仓库服务器验证本地机器的一种身份识别方式。入职一家新公司后,公司的git服务器管理员,会要求你把你的git公钥通过邮件的方式发给它,配置好之后,以后每次向远程代码仓库提交代码,就不用输入用户名和密码啦。
2.2 生成公钥
这里插一句,如果感到git bash的窗口太小或者字体太小,可以自己进行调整。调整的方式是,打开git bash命令窗口后,在命令窗的标题栏,鼠标右键,然后选择options,安装下面的操作进行设置
// 窗口尺寸设置 options --> windows -->修改行数(高度)+列数(宽度) // 窗口字体设置 options --> text -->设置字体大小
2.2.1 配置用户名和邮箱
在公司使用的话,用户名建议配置成自己的真名,这样查看代码修改者的时候,比较好找。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 "邮箱地址"
2.2.2 生成密钥
ssh-keygen
生成秘钥过程会有三次问询交互。第一次是询问生成秘钥存储路径和名称,默认存储位置是 /c/Users/用户名/.ssh/id_rsa
, 不想更改的话按回车键。第二和第三次是要求你输入两次私钥密码。用于查看秘钥时的认证,一次是设置密码,一次是确认密码, 如果你不想在使用密钥时输入口令,按回车跳过即可。
ssh-keygen -t rsa -C “上一步的邮箱地址”
2.2.3 查看公钥
cd ~/.ssh && ls cat id_rsa.pub
2.3 配置公钥
登录个人或企业的git网站,在用户设置-->SSH公钥里面 ,给公钥起个有意义的名称,将生成的公钥粘贴到公钥输入框里(注意要删除公钥末尾的空白或者换行符),点击保存,就可以了。
2.4 Git管理多个SSH密钥,Git多帐号配置
创建步骤:
2.4.1 在每个项目下,单独配置用户名和邮箱地址,为不同项目生成密钥对,生成时指定私钥名称
git config --local user.name "你的名字" git config --local user.email "你的邮箱"
ssh-keygen命令生成SSH-KEY密钥对文件时,需要输入文件存储路径,为不同账号起不同的名称
ssh-keygen -t rsa -C "test@126.com”
2.4.2 在~ssh文件夹下,创建一个config文件,配置每个账号域名、用户名 、 验证方式、私钥文件路径
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是私钥文件路径
Start SSH 프로토콜입니다. HTTPS 프로토콜을 사용하는 경우 매번 사용자 이름과 비밀번호를 입력해야 합니다.
공개 키는 코드 웨어하우스 서버가 로컬 머신을 확인하기 위한 식별 방법입니다. 새 회사에 가입한 후 회사의 git 서버 관리자는 git 공개 키를 이메일로 보내도록 요청할 것입니다. 이를 구성한 후에는 원격 코드 저장소에 코드를 제출할 때마다 사용자 이름과 비밀번호를 입력할 필요가 없습니다. 라.
2.2 공개 키 생성
여기에 문장을 삽입하세요. git bash 창이 너무 작거나 글꼴이 너무 작다고 생각되면 직접 조정할 수 있습니다. 조정 방법은 git bash 명령 창을 열고 명령 창의 제목 표시줄을 마우스 오른쪽 버튼으로 클릭한 후 옵션을 선택하고 다음 작업을 설치하여 설정하는 것입니다🎜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代码,不写主机名的话,就是默认主机
2.2 .1 사용자 이름 및 이메일 구성
🎜회사에서 사용하는 경우 사용자 이름을 실명으로 구성하는 것이 좋습니다. 이렇게 하면 코드 수정자를 더 쉽게 찾을 수 있습니다. git config 명령에는 세 가지 범위가 있습니다. 🎜git clone /path/to/repository // 克隆本地库 git clone git/ssh/http[s]/ftp[s]/file/rsync:username@ip/path/to/repository // 克隆远端库🎜구성 항목이 많은 경우 이 지침 뒤에 -e 매개변수를 추가하고 구성 파일을 열어 구성할 수 있습니다. 편집 후 먼저 esc를 누른 다음 Shift+: 키 조합을 누르고 마지막으로 명령줄에 wq를 입력하여 저장하고 종료합니다. 여기서는 분명히 git config --global 구성 명령을 선택해야 합니다. 🎜
git branch 查看本地所有的分支 git branch -r 查看远程所有分支 git branch -vv 查看本地分支和远程分支的追踪关系
2.2.2 키 생성
🎜ssh-keygen
비밀 키를 생성하는 과정에는 세 가지 문의와 상호 작용이 포함됩니다. 첫 번째는 생성된 비밀키 저장 경로와 이름을 묻는 것입니다. 기본 저장 위치는 /c/Users/username/.ssh/id_rsa
입니다. Enter를 누르십시오. 두 번째와 세 번째에는 개인 키 비밀번호를 두 번 입력해야 합니다. 비밀키를 볼 때 인증에 사용되며, 한 번은 비밀번호를 설정하고, 한 번은 비밀번호를 확인하기 위해 사용됩니다. 키 사용 시 비밀번호를 입력하지 않으려면 Enter를 눌러 건너뛰면 됩니다. 🎜git checkout 分支名🎜

2.2.3 공개 키 보기
git checkout -b 新分支名 // 从当前所处的本地分支下,创建一个新分支,分支名建议以 feature-YYYYMMDD-开发功能概述-姓名简称,这样的格式命名 git checkout -b 新分支名 远程主机名/远程分支名 // 从远程分支创建一个新分支,并追踪远程分支🎜

2.3 공개 키 구성🎜🎜개인 또는 기업 Git 웹사이트에 로그인하세요. 사용자 설정 - ->SSH 공개 키에서 공개 키에 의미 있는 이름을 지정하고 생성된 공개 키를 공개 키 입력 상자에 붙여넣습니다. (공개 키 끝에 있는 공백 또는 개행 문자를 삭제해야 합니다.) , 저장을 클릭하면 됩니다. 🎜🎜
🎜2.4 Git은 여러 SSH 키를 관리하고 Git 다중 계정 구성 🎜🎜생성 단계: 🎜2.4.1 각 프로젝트 이름 및 이메일 주소에서 별도로 사용자 구성 , 다양한 프로젝트에 대한 키 쌍 생성, 생성 시 개인 키 이름 지정
git branch -m 旧名称 新名称
🎜ssh-keygen 명령이 SSH-KEY 키 쌍 파일을 생성할 때 파일 저장 경로를 입력하고 다른 프로젝트에 대한 다른 키를 생성해야 합니다. 이름 🎜git branch -D 分支名 // 先切换到别的分支名下,删除本地分支
git push --delete 远程主机 远程分支名 // 删除远程分支
2.4.2 ~ssh 폴더에 구성 파일을 생성하고 각 계정의 도메인 이름, 사용자 이름, 확인 방법 및 개인 키 파일 경로를 구성합니다 git merge 当前分支要合并的分支名 -m '合并备注'
git merge --no-ff 当前分支要合并的分支名 // 保留分支合并之前的历史提交记录
git merge --squash 当前分支要合并的分支名 // 将分支合并之前多次提交记录合并为一次
🎜HostName
은 서버 주소, User
는 사용자 이름, PreferredAuthentications
는 확인 방법, IdentityFile 개인 키 파일 경로
code>🎜🎜3 Git 웨어하우스 생성 🎜🎜은 두 가지 상황으로 나뉘는데, 하나는 웨어하우스가 없는 경우이고, 다른 하나는 기존 웨어하우스가 있는 경우를 살펴보겠습니다. 하나, 처음부터 창고를 만든 다음 원격으로 푸시하세요 🎜3.1 从零开始创建本地库,并推送到远程
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代码,不写主机名的话,就是默认主机
3.2 克隆已有仓库到本地
git clone /path/to/repository // 克隆本地库
git clone git/ssh/http[s]/ftp[s]/file/rsync:username@ip/path/to/repository // 克隆远端库
2.4.1 각 프로젝트 이름 및 이메일 주소에서 별도로 사용자 구성 , 다양한 프로젝트에 대한 키 쌍 생성, 생성 시 개인 키 이름 지정
git branch -m 旧名称 新名称🎜ssh-keygen 명령이 SSH-KEY 키 쌍 파일을 생성할 때 파일 저장 경로를 입력하고 다른 프로젝트에 대한 다른 키를 생성해야 합니다. 이름 🎜
git branch -D 分支名 // 先切换到别的分支名下,删除本地分支 git push --delete 远程主机 远程分支名 // 删除远程分支
2.4.2 ~ssh 폴더에 구성 파일을 생성하고 각 계정의 도메인 이름, 사용자 이름, 확인 방법 및 개인 키 파일 경로를 구성합니다 git merge 当前分支要合并的分支名 -m '合并备注'
git merge --no-ff 当前分支要合并的分支名 // 保留分支合并之前的历史提交记录
git merge --squash 当前分支要合并的分支名 // 将分支合并之前多次提交记录合并为一次
🎜HostName
은 서버 주소, User
는 사용자 이름, PreferredAuthentications
는 확인 방법, IdentityFile 개인 키 파일 경로
code>🎜🎜3 Git 웨어하우스 생성 🎜🎜은 두 가지 상황으로 나뉘는데, 하나는 웨어하우스가 없는 경우이고, 다른 하나는 기존 웨어하우스가 있는 경우를 살펴보겠습니다. 하나, 처음부터 창고를 만든 다음 원격으로 푸시하세요 🎜3.1 从零开始创建本地库,并推送到远程
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代码,不写主机名的话,就是默认主机
3.2 克隆已有仓库到本地
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协议的效率 。
4 .git目录的组成
5 Git存储区概念
如果你不清楚git add ,git commit ,git push都做了什么,那可能是因为你不知道git仓库存储区管理方式。git将本地的代码保存分为三个存储空间。
- 工作区:用户编辑保存项目文件的区域,用户直接可以接触的地方。
- 暂存区:保存准备提交的文件列表信息,保存在上文的.git文件夹下的index目录中;
- 版本库:git 之所以快,是因为大多数提交都是对本地仓库而言的,不依赖网络也能进行版本管理,需要与远程仓库同步的时候才推送到远程仓库。
6 分支操作
分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。在其它分支上进行开发,完成后再将它们合并到主分支上。
6.1 查看分支
git branch 查看本地所有的分支 git branch -r 查看远程所有分支 git branch -vv 查看本地分支和远程分支的追踪关系
6.2 切换分支
git checkout 分支名
6.3 新建分支
git checkout -b 新分支名 // 从当前所处的本地分支下,创建一个新分支,分支名建议以 feature-YYYYMMDD-开发功能概述-姓名简称,这样的格式命名 git checkout -b 新分支名 远程主机名/远程分支名 // 从远程分支创建一个新分支,并追踪远程分支
6.4 重命名分支
git branch -m 旧名称 新名称
6.5 删除分支
git branch -D 分支名 // 先切换到别的分支名下,删除本地分支 git push --delete 远程主机 远程分支名 // 删除远程分支
6.6 合并分支
6.6.1 git merge
git merge 当前分支要合并的分支名 -m '合并备注' git merge --no-ff 当前分支要合并的分支名 // 保留分支合并之前的历史提交记录 git merge --squash 当前分支要合并的分支名 // 将分支合并之前多次提交记录合并为一次
6.6.2 git rebase
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) |
根据需要编辑完之后保存即可。
6.6.3 git merge和git rebase 合并分支的差异
git rebase生成的历史记录线比较好看,merge比rebase有更多的历史记录,一方认为,合并分支不能仅仅为了好看,而要记录某个分支完整开发历史,一根直线的历史,很难分辨出开发历程和工作分配,如果开发过程跌跌撞撞,要进行如实记录,遍于后期改进。
另一方认为,在开发过程中,如果某个分支功能比较多, commit量比较多时,使用rebase可以将当前分支提交记录整理过后再合并回主干,这样主干的演变轨迹线会看着比较美观,比较清晰。如果项目成员对git用得比较熟练,建议使用git rebase,否则建议使用git merge,便于查看提交历史。
6.7 合并分支冲突
冲突的原因是两个不同的开发者改了相同文件相同位置的代码,冲突提示,
$ 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
6.8 追踪分支
追踪分支主要用来对比当前和远程分支的版本, 比如说origin/master分支比master多提交了两次,意味着你需要将origin/master的分支更新到master。
git branch --set-upstream-to=远程主机名/远程分支名 本地分支名(可不写,不写表示当前分支)
7 设置忽略文件
7.1 创建忽略文件
在仓库根目录下新建.gitignore
文件,文件名不可更改。在Win系统下,不允许新建以.
开头的文件或文件夹,因此需要在Git Bash中新建,命令如下:
cd 本地代码仓库目录 vim .gitignore
7.2 忽略文件语法
# 以#开头的行都是注释 # 忽略*.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
在.gitignored中添加需要过滤的文件
commit, push提交.gitignore 配置这个后其他成员pull后working directory中对应的文件会删除,
8 工作空间操作
8.1 进度暂存
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 // 删除所有暂存内容
8.2 将工作区的改动添加暂存区
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
8.3 将暂存区的文件提交到本地版本库
git commit -m "代码提交信息" git commit -a -m "代码提交信息" # -a是把unstaged的文件变成staged(不包括新建的文件),然后commit git commit --amend # 修改提交的commit(没有push) git commit --amend -m "comment" # 修改commit注释
8.4 将本地版本库推送到远程版本库
git push <远程主机名> <本地分支名>:<远程分支名> git push -f <远程主机名> <本地分支名>:<远程分支名> // 强制推送
git push命令使用时常见的四种情况:
git push | 위와 같이 원격 브랜치를 생략하면 로컬 브랜치를 추적 관계에 있는 원격 브랜치로 푸시하는 것을 의미합니다(보통 둘 다). 동일한 이름을 가짐), 원격 브랜치가 존재하지 않으면 생성됩니다. |
---|---|
git push : | 로컬 브랜치 이름이 생략되면 이는 지정된 원격 브랜치를 삭제하는 것을 의미합니다. 이는 빈 로컬 브랜치를 원격 브랜치로 푸시하는 것과 같기 때문입니다. 이는 git push Origin --delete 원격 브랜치 |
git push | 있는 경우와 동일합니다. 는 현재 브랜치와 원격 브랜치 간의 추적 관계입니다. 그러면 로컬 브랜치와 원격 브랜치를 모두 생략할 수 있으며, 현재 브랜치는 원격 호스트의 해당 브랜치로 푸시됩니다 |
git push | 현재 브랜치에는 원격 브랜치가 하나만 있으면 호스트 이름을 생략할 수 있습니다 |
8.5 更新远程版本库的内容到本地版本库
git fetch <远程主机名> <远程分支名>:<本地分支名> git pull <远程主机名> <远程分支名>:<本地分支名> // 等于git fetch+git merge
git pull 常见的四种省略参数的情况,与git push比较类似。这里就不再赘述。git pull除了更新和自动合并当前代码之外,还有更新仓库所有分支的功能,注意是更新分支,不是更新分支上的代码。
8.6 git版本库回滚
回退命令
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 '备注'
git revert和git reset的区别
(1) git reset只能针对本地操作,如果本地删除的内容已经推送到远程仓库,下一次更新时,被删除的内容会恢复。git revert可以对对远程服务器执行回退操作。下一次更新时,本地被删除的文件,不会恢复。
(2) git revert会使提交记录增多,git revert是撤销指定版本的提交,会产生一个新的提交记录,git reset会使提交记录减少,git reset是回卷,会撤销指定版本之后的所有提交记录
git revert和get 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
查看命令历史,以便确定要回到未来的哪个版本。
8.7 git 提交指定分支
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 <Hash-b1> <Hash-bN>
8.8 git删除
当我们需要删除暂存区或版本库上的文件, 同时工作区也不需要这个文件了, 可以使用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
8.9 git log
推荐两条简写提交日志格式设置参数, 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- %Cblue%s %Cgreen(%cd) %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- %Cblue%s %Cgreen(%cd) %C(bold blue)<%an>'"
命令浅析:
--no-merges:不显示分支合并日志 %h:简短hash提交字符串 %cd:提交日期 %an:提交者 %s:提交说明 %C+颜色值+内容=给内容设置相应的颜色
看看这两种风格的注释是不是看着更优雅,更舒服
9 Tag操作
在软件发布时创建标签,建一个发布版本的里程碑,是被推荐的。
9.1 tag创建
#查询版本号 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
9.2 查看tag
# 查看某个tag记录 git show tag-name # 查看所有的tag git tag -ln # 加-ln,查看tag简略信息
9.3 使用tag
// 取出打过tag的某个版本 git checkout -b branch_name tag_name
9.4 删除tag
#删除本地的tag命令是 git tag -d tag-name #删除远程tag的命令是 git push origin --delete tag-name
10. .gitlab-ci.yml配置参考示例
#镜像名称不是随意起的,要与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
11. git良好的使用习惯
- 每次提交前,检查一下所提交代码,是不是真正想修改的内容
- 提交的粒度要细,频率要高,能极大减少代码冲突和重要改动无版本存储问题
- 最好打通gitlab和钉钉,企业微信机器人代码提交通知,有人提交代码时,可以及时通知其它人更新,减少代码冲突的概率
- git的自动合并功能,有瑕疵,有时候文件的一些部分,合并是对的,一些部分,合并有冲突,最好逐个文件检查
- 给项目配置husky工具,可以在提交代码的时候,对代码进行格式化,或者检查是否符合lint规则,如果不符,可以终止提交
- 对于异常操作,一定要保留现场,查明原因,这样记忆更深刻。
- 要看一下每条git命令的回显,看看是不是你要执行的操作, 有没有遗漏或报错或者执行终止的情况
- git减少代码冲突的做法
- 分配任务时,尽量把任务拆分成独立的模块, 彼此之间的交集越少越好
- 对于容易冲突的大文件,可以指定由一个人去修改
- 将大文件拆分成多个子文件,将所有的子文件导入到一个index.ts索引文件中,使用的时候从索引文件中按需导出
- 组内成员对预感会产生冲突的大文件,商量好修改顺序
12. git 常见报错
- error: pathspec 'branch-xxx' did not match any file(s) known to git
git checkout 的分支不存在.git文件夹引起的
- 修改了文件的名称,将小写改成大写,提交到git远程仓库,发现文件名称没有改变,解决方法是
git rm -r --cached .
3. 合并代码,推荐用如下命令,比git merge更好用。
git pull origin remote_need_merge_branch_name
- 在VSCode的git命令窗口提交代码时,报如下错误:
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,解决方案是,强制刷新一下远程的所有tag
git fetch --tags -f
5. .gitignore文件中设置的忽略文件不生效的解决方法,.gitignore中设置的忽略规则,是针对未添加到版本管理的文件而言,对已添加到版本库的文件不生效。解决方法是将所有文件先从版本库删除,再重新添加一遍。
git rm --cached 要删除的xxx文件夹或文件
6. Could not retrieve the pipeline status. ---- 无法检索流水线状态。
这种报错是因为没有流水线文件所致。
- error: cannot lock ref ‘xxx’: ‘xxx’ exists; cannot create ‘xxx’
原因:git工程的.git/refs目录下跟踪的某些git分支,在pull时候发现与远程仓库对应的分支refs不同,因此导致 git pull 失败
- A同事
$ git push -force
了test这个分支,导致远程仓库的分支被覆盖,而你本地的refs则会与远程仓库的分支不一致,产生问题; - git分支是不区分大小写,有人删除了远程仓库的分支又重新创建一个同样名字的分支同样也会产生问题。
解决方法:
- 使用git命令
git update-ref -d xxx 删除本地.git下的xxx文件
- 如果不行,强制更新 git pull -p 强制更新
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
- 已删除的文件,并且本地已暂存,无法在暂存状态下复原删除的文件,将删除文件从暂存仓库中移除,才能恢复删除的文件。
- 错误: error dst refspec matches more than one ,原因: tags与branch中有重名的分支
解决方法:删除重名分支 12. git checkout -b 创建新分支时,报fatal: cannot lock ref xxx
git 把分支信息存放在 .git/refs/heads
目录中,每个分支是一个文件。如果.git/refs/heads下存在同名目录,就会报这个错误。
解决方法:
从一开始创建分支时,如果要创建一个以xxx为前缀的开发名,就要创建成xxx/test1这种格式。
更多编程相关知识,请访问:编程视频!!
위 내용은 [구성 및 공유] 몇 가지 일반적인 git 명령의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

GIT는 개발자가 파일 변경을 추적하고 협력하며 코드 버전을 관리하는 데 도움이되는 오픈 소스 분산 버전 제어 시스템입니다. 핵심 기능에는 1) 레코드 코드 수정, 2) 이전 버전으로의 폴백, 3) 협업 개발 및 4) 병렬 개발을위한 분기 생성 및 관리가 포함됩니다.

Git과 Github도 같은 것이 아닙니다. GIT는 버전 제어 시스템이며 GitHub는 GIT 기반 코드 호스팅 플랫폼입니다. GIT는 코드 버전을 관리하는 데 사용되며 Github은 온라인 협업 환경을 제공합니다.

HTML 프로젝트를 관리하기 위해 GitHub를 사용하는 이유는 버전 제어, 협업 개발 및 작품 발표를위한 플랫폼을 제공하기 때문입니다. 특정 단계에는 다음이 포함됩니다. 1. Git 저장소 작성 및 초기화, 2. HTML 파일 추가 및 제출, 3. GitHub에 푸시, 4. GitHubPages를 사용하여 웹 페이지를 배포, 5. GitHubactions를 사용하여 빌드 및 배포를 자동화하십시오. 또한 GitHub은 HTML 프로젝트를 최적화하고 협업하는 데 도움이되는 코드 검토, 문제 및 풀 레크 기능 기능을 지원합니다.

GIT에서 시작하는 것은 버전 제어 원칙에 대한 깊은 이해에 더 적합하며 GitHub에서 시작하는 것은 협업 및 코드 호스팅에 중점을 두는 데 더 적합합니다. 1. git은 코드 버전 기록을 관리하는 데 도움이되는 분산 버전 제어 시스템입니다. 2. GitHub는 GIT를 기반으로 한 온라인 플랫폼으로 코드 호스팅 및 협업 기능을 제공합니다.

Microsoft는 Git을 소유하지 않지만 Github를 소유하고 있습니다. 1. Git은 2005 년 Linus Torvaz가 만든 분산 버전 제어 시스템입니다. 2. Github는 GIT를 기반으로 한 온라인 코드 호스팅 플랫폼입니다. 2008 년에 설립되어 2018 년 Microsoft에서 인수했습니다.

이력서에서는 위치 요구 사항과 개인 경험에 따라 GIT 또는 GitHub를 작성하도록 선택해야합니다. 1. 위치에 GIT 기술이 필요한 경우 git을 강조 표시하십시오. 2. 직위가 커뮤니티 참여를 가치있게 평가하면 Github를 보여주십시오. 3. 사용 경험과 프로젝트 사례를 자세히 설명하고 완전한 문장으로 끝내십시오.

Gitlab은 완전한 DevOps 툴체인과 강력한 CI/CD 기능을 제공하기 때문에 일부 개발자와 팀에게 더 좋습니다. 1. Gitlab의 CI/CD 기능은 플랫폼 내에 통합되어 코드 제출에서 배포까지의 전체 프로세스 자동화를 지원합니다. 2. 서버 측 렌더링 기술은 대규모 프로젝트의 페이지로드 속도를 향상시킵니다. 3. Gitlab의 권한 관리 시스템은보다 유연하고 세밀한 제어를 지원합니다.

Github는 배우기가 어렵지 않습니다. 1) 기본 지식 마스터 : GitHub는 코드 변경 및 협업 개발을 추적하는 데 도움이되는 GIT 기반 버전 제어 시스템입니다. 2) 핵심 기능 이해 : 버전 제어는 각 제출, 로컬 작업 지원 및 원격 동기화를 기록합니다. 3) 사용 방법 : 저장소 작성부터 커밋 푸시, 분기 사용 및 요청을 당기는 것까지. 4) 일반적인 문제 해결 : 합병 충돌 및 파일 추가 잊어 버린 것과 같은. 5) 최적화 실습 : 의미있는 제출 메시지를 사용하고, 분기를 정리하고, 프로젝트 보드를 사용하여 작업을 관리합니다. 실습과 커뮤니티 커뮤니케이션을 통해 Github의 학습 곡선은 가파르지 않습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
