[Organisation und Freigabe] Einige gängige Git-Befehle
Dieser Artikel wird Ihnen beim Erlernen von Git helfen und einige gängige Git-Befehle zusammenfassen. Ich hoffe, er wird Ihnen hilfreich sein!
1. Laden Sie Windows-Git herunter und installieren Sie es.
Offizielle Website-Download-Adresse: Zum Herunterladen klicken
2.1 Öffentlich Der Zweck des SchlüsselsDer Grund, warum Git die Verwendung des SSH-Protokolls empfiehlt: Durch die Verwendung des SSH-Protokolls kann die Eingabe des Passworts bei jedempush
vermieden werden. git@github.comStarten ist das SSH-Protokoll. Bei Verwendung des HTTPS-Protokolls müssen Sie jedes Mal Ihren Benutzernamen und Ihr Passwort eingeben.
Der öffentliche Schlüssel ist eine Identifikationsmethode für den Code-Warehouse-Server zur Überprüfung des lokalen Computers. Nachdem Sie einem neuen Unternehmen beigetreten sind, werden Sie vom Git-Server-Administrator des Unternehmens aufgefordert, Ihren öffentlichen Git-Schlüssel per E-Mail an das Unternehmen zu senden. Nach der Konfiguration müssen Sie nicht jedes Mal Ihren Benutzernamen und Ihr Passwort eingeben, wenn Sie Code an das Remote-Code-Repository senden. La.
2.2 Öffentlichen Schlüssel generieren
Fügen Sie hier einen Satz ein. Wenn Sie das Gefühl haben, dass das Git-Bash-Fenster zu klein oder die Schriftart zu klein ist, können Sie es selbst anpassen. Die Anpassungsmethode besteht darin, das Git-Bash-Befehlsfenster zu öffnen, mit der rechten Maustaste auf die Titelleiste des Befehlsfensters zu klicken, dann Optionen auszuwählen und die folgenden Vorgänge zum Einrichten zu installieren// 窗口尺寸设置 options --> windows -->修改行数(高度)+列数(宽度) // 窗口字体设置 options --> text -->设置字体大小
2.2 .1 Konfiguration Benutzername und E-Mail
push
输入密码。 git@github.com开头的就是SSH协议。 使用Https协议则每次都要输入用户名和密码。公钥是代码仓库服务器验证本地机器的一种身份识别方式。入职一家新公司后,公司的git服务器管理员,会要求你把你的git公钥通过邮件的方式发给它,配置好之后,以后每次向远程代码仓库提交代码,就不用输入用户名和密码啦。
2.2 生成公钥
这里插一句,如果感到git bash的窗口太小或者字体太小,可以自己进行调整。调整的方式是,打开git bash命令窗口后,在命令窗的标题栏,鼠标右键,然后选择options,安装下面的操作进行设置
# 对当前仓库有效 git config --local # 对当前登录者有效,对所有仓库都有效 git config --global # 对登录这台电脑的人都有效,对所有仓库都有效 git config --system
2.2.1 配置用户名和邮箱
在公司使用的话,用户名建议配置成自己的真名,这样查看代码修改者的时候,比较好找。git config命令有三种作用域。
git config --global user.name "用户名" git config --global user.email "邮箱地址"
如果配置项比较多,可以在这些指令后面加 -e 参数,打开配置文件进行配置。编辑完先按esc, 然后再按shift+:组合键,最后在命令行输入wq保存退出
这里明显应该选择git config --global配置命令。
ssh-keygen -t rsa -C “上一步的邮箱地址”
2.2.2 生成密钥
ssh-keygen
生成秘钥过程会有三次问询交互。第一次是询问生成秘钥存储路径和名称,默认存储位置是 /c/Users/用户名/.ssh/id_rsa
, 不想更改的话按回车键。第二和第三次是要求你输入两次私钥密码。用于查看秘钥时的认证,一次是设置密码,一次是确认密码, 如果你不想在使用密钥时输入口令,按回车跳过即可。
cd ~/.ssh && ls cat id_rsa.pub
2.2.3 查看公钥
git config --local user.name "你的名字" git config --local user.email "你的邮箱"
2.3 配置公钥
登录个人或企业的git网站,在用户设置-->SSH公钥里面 ,给公钥起个有意义的名称,将生成的公钥粘贴到公钥输入框里(注意要删除公钥末尾的空白或者换行符),点击保存,就可以了。
2.4 Git管理多个SSH密钥,Git多帐号配置
创建步骤:
2.4.1 在每个项目下,单独配置用户名和邮箱地址,为不同项目生成密钥对,生成时指定私钥名称
ssh-keygen -t rsa -C "test@126.com”
ssh-keygen命令生成SSH-KEY密钥对文件时,需要输入文件存储路径,为不同账号起不同的名称
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
2.4.2 在~ssh文件夹下,创建一个config文件,配置每个账号域名、用户名 、 验证方式、私钥文件路径
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代码,不写主机名的话,就是默认主机
HostName
是服务器的地址,User
是用户名,PreferredAuthentications
是验证方式,IdentityFile是私钥文件路径
Wenn Sie es in einem Unternehmen verwenden, wird empfohlen, den Benutzernamen auf Ihren echten Namen zu konfigurieren. Dies erleichtert das Auffinden des Codemodifikators. Der Befehl git config hat drei Bereiche.
git clone /path/to/repository // 克隆本地库 git clone git/ssh/http[s]/ftp[s]/file/rsync:username@ip/path/to/repository // 克隆远端库
Wenn viele Konfigurationselemente vorhanden sind, können Sie nach diesen Anweisungen den Parameter -e hinzufügen und die Konfigurationsdatei zur Konfiguration öffnen. Drücken Sie nach der Bearbeitung zuerst die Esc-Taste, dann die Tastenkombination Umschalt+: und geben Sie schließlich zum Speichern und Beenden wq in die Befehlszeile ein. Natürlich sollten Sie hier den Konfigurationsbefehl git config --global wählen.
git branch 查看本地所有的分支 git branch -r 查看远程所有分支 git branch -vv 查看本地分支和远程分支的追踪关系
2.2.2 Schlüssel generieren
ssh-keygen
Der Prozess der Generierung des geheimen Schlüssels umfasst drei Abfragen und Interaktionen. Beim ersten Mal müssen Sie nach dem Speicherpfad und Namen des generierten geheimen Schlüssels fragen. Der Standardspeicherort ist /c/Users/username/.ssh/id_rsa
. drücken Sie die Eingabetaste. Beim zweiten und dritten Mal müssen Sie das Passwort für den privaten Schlüssel zweimal eingeben. Wird zur Authentifizierung beim Anzeigen des geheimen Schlüssels verwendet, einmal zum Festlegen des Passworts und einmal zum Bestätigen des Passworts. Wenn Sie das Passwort bei Verwendung des Schlüssels nicht eingeben möchten, drücken Sie einfach die Eingabetaste, um zu überspringen.
git checkout 分支名

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

2.3 Konfigurieren Sie den öffentlichen Schlüssel🎜🎜Melden Sie sich auf der persönlichen oder geschäftlichen Git-Website an die Benutzereinstellungen - ->Geben Sie im öffentlichen SSH-Schlüssel dem öffentlichen Schlüssel einen aussagekräftigen Namen, fügen Sie den generierten öffentlichen Schlüssel in das Eingabefeld für den öffentlichen Schlüssel ein (achten Sie darauf, das Leerzeichen oder das Zeilenumbruchzeichen am Ende des öffentlichen Schlüssels zu löschen). , klicken Sie auf Speichern und fertig. 🎜🎜
🎜2.4 Git verwaltet mehrere SSH-Schlüssel, Git-Multi-Account-Konfiguration 🎜🎜Erstellungsschritte: 🎜2.4.1 Benutzer individuell unter jedem Projektnamen und E-Mail-Adresse konfigurieren , Schlüsselpaare für verschiedene Projekte generieren, beim Generieren den Namen des privaten Schlüssels angeben
git branch -m 旧名称 新名称
Nach dem Login kopierenNach dem Login kopieren🎜Wenn der Befehl ssh-keygen die SSH-KEY-Schlüsselpaardatei generiert, müssen Sie den Dateispeicherpfad eingeben und verschiedene Schlüssel dafür erstellen verschiedene Konten. Name 🎜git branch -D 分支名 // 先切换到别的分支名下,删除本地分支
git push --delete 远程主机 远程分支名 // 删除远程分支
Nach dem Login kopierenNach dem Login kopieren2.4.2 Erstellen Sie im Ordner ~ssh eine Konfigurationsdatei und konfigurieren Sie jeden Kontodomänennamen, Benutzernamen, Überprüfungsmethode und privaten Schlüsseldateipfad< /h5> git merge 当前分支要合并的分支名 -m '合并备注'
git merge --no-ff 当前分支要合并的分支名 // 保留分支合并之前的历史提交记录
git merge --squash 当前分支要合并的分支名 // 将分支合并之前多次提交记录合并为一次
Nach dem Login kopierenNach dem Login kopieren🎜HostName
ist die Adresse des Servers, User
ist der Benutzername, PreferredAuthentications
ist die Verifizierungsmethode, IdentityFile ist der Pfad der privaten Schlüsseldatei
code>🎜🎜3 Git-Warehouse-Erstellung 🎜🎜 ist in zwei Situationen unterteilt: Zum einen gibt es kein Warehouse und zum anderen gibt es ein vorhandenes Warehouse. Schauen wir uns das erste an Erstellen Sie zunächst ein Lager von Grund auf und übertragen Sie es dann auf die Fernbedienung 🎜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代码,不写主机名的话,就是默认主机
Nach dem Login kopierenNach dem Login kopieren3.2 克隆已有仓库到本地
git clone /path/to/repository // 克隆本地库
git clone git/ssh/http[s]/ftp[s]/file/rsync:username@ip/path/to/repository // 克隆远端库
Nach dem Login kopierenNach dem Login kopieren
2.4.1 Benutzer individuell unter jedem Projektnamen und E-Mail-Adresse konfigurieren , Schlüsselpaare für verschiedene Projekte generieren, beim Generieren den Namen des privaten Schlüssels angeben
git branch -m 旧名称 新名称
git branch -D 分支名 // 先切换到别的分支名下,删除本地分支 git push --delete 远程主机 远程分支名 // 删除远程分支
2.4.2 Erstellen Sie im Ordner ~ssh eine Konfigurationsdatei und konfigurieren Sie jeden Kontodomänennamen, Benutzernamen, Überprüfungsmethode und privaten Schlüsseldateipfad< /h5> git merge 当前分支要合并的分支名 -m '合并备注'
git merge --no-ff 当前分支要合并的分支名 // 保留分支合并之前的历史提交记录
git merge --squash 当前分支要合并的分支名 // 将分支合并之前多次提交记录合并为一次
Nach dem Login kopierenNach dem Login kopieren🎜HostName
ist die Adresse des Servers, User
ist der Benutzername, PreferredAuthentications
ist die Verifizierungsmethode, IdentityFile ist der Pfad der privaten Schlüsseldatei
code>🎜🎜3 Git-Warehouse-Erstellung 🎜🎜 ist in zwei Situationen unterteilt: Zum einen gibt es kein Warehouse und zum anderen gibt es ein vorhandenes Warehouse. Schauen wir uns das erste an Erstellen Sie zunächst ein Lager von Grund auf und übertragen Sie es dann auf die Fernbedienung 🎜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代码,不写主机名的话,就是默认主机
Nach dem Login kopierenNach dem Login kopieren3.2 克隆已有仓库到本地
git clone /path/to/repository // 克隆本地库
git clone git/ssh/http[s]/ftp[s]/file/rsync:username@ip/path/to/repository // 克隆远端库
Nach dem Login kopierenNach dem Login kopieren
git merge 当前分支要合并的分支名 -m '合并备注' git merge --no-ff 当前分支要合并的分支名 // 保留分支合并之前的历史提交记录 git merge --squash 当前分支要合并的分支名 // 将分支合并之前多次提交记录合并为一次
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协议的效率 。
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 | Wenn der Remote-Zweig weggelassen wird, wie oben, bedeutet dies, dass der lokale Zweig zu dem Remote-Zweig verschoben wird, der eine Tracking-Beziehung mit ihm hat (normalerweise beides). Wenn der Remote-Zweig nicht vorhanden ist, wird er erstellt bedeutet, den angegebenen Remote-Zweig zu löschen, da dies dem Verschieben eines leeren lokalen Zweigs in den Remote-Zweig entspricht, was äquivalent ist git push origin --delete remote branch |
---|---|
Wenn vorhanden ist eine Tracking-Beziehung zwischen dem aktuellen Zweig und dem Remote-Zweig. Dann können sowohl der lokale Zweig als auch der Remote-Zweig weggelassen werden, und der aktuelle Zweig wird an den entsprechenden Zweig des Remote-Hosts gepusht | |
Wenn Der aktuelle Zweig hat nur einen Remote-Zweig, dann kann der Hostname weggelassen werden |