Heim >Entwicklungswerkzeuge >Idiot >[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!
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.com// 窗口尺寸设置 options --> windows -->修改行数(高度)+列数(宽度) // 窗口字体设置 options --> text -->设置字体大小
push
输入密码。 git@github.com开头的就是SSH协议。 使用Https协议则每次都要输入用户名和密码。公钥是代码仓库服务器验证本地机器的一种身份识别方式。入职一家新公司后,公司的git服务器管理员,会要求你把你的git公钥通过邮件的方式发给它,配置好之后,以后每次向远程代码仓库提交代码,就不用输入用户名和密码啦。
这里插一句,如果感到git bash的窗口太小或者字体太小,可以自己进行调整。调整的方式是,打开git bash命令窗口后,在命令窗的标题栏,鼠标右键,然后选择options,安装下面的操作进行设置
# 对当前仓库有效 git config --local # 对当前登录者有效,对所有仓库都有效 git config --global # 对登录这台电脑的人都有效,对所有仓库都有效 git config --system
在公司使用的话,用户名建议配置成自己的真名,这样查看代码修改者的时候,比较好找。git config命令有三种作用域。
git config --global user.name "用户名" git config --global user.email "邮箱地址"
如果配置项比较多,可以在这些指令后面加 -e 参数,打开配置文件进行配置。编辑完先按esc, 然后再按shift+:组合键,最后在命令行输入wq保存退出
这里明显应该选择git config --global配置命令。
ssh-keygen -t rsa -C “上一步的邮箱地址”
ssh-keygen
生成秘钥过程会有三次问询交互。第一次是询问生成秘钥存储路径和名称,默认存储位置是 /c/Users/用户名/.ssh/id_rsa
, 不想更改的话按回车键。第二和第三次是要求你输入两次私钥密码。用于查看秘钥时的认证,一次是设置密码,一次是确认密码, 如果你不想在使用密钥时输入口令,按回车跳过即可。
cd ~/.ssh && ls cat id_rsa.pub
git config --local user.name "你的名字" git config --local user.email "你的邮箱"
登录个人或企业的git网站,在用户设置-->SSH公钥里面 ,给公钥起个有意义的名称,将生成的公钥粘贴到公钥输入框里(注意要删除公钥末尾的空白或者换行符),点击保存,就可以了。
创建步骤:
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
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 // 克隆远端库
git branch 查看本地所有的分支 git branch -r 查看远程所有分支 git branch -vv 查看本地分支和远程分支的追踪关系
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 分支名🎜 strong>🎜
git checkout -b 新分支名 // 从当前所处的本地分支下,创建一个新分支,分支名建议以 feature-YYYYMMDD-开发功能概述-姓名简称,这样的格式命名 git checkout -b 新分支名 远程主机名/远程分支名 // 从远程分支创建一个新分支,并追踪远程分支🎜🎜
git branch -m 旧名称 新名称🎜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 远程主机 远程分支名 // 删除远程分支
git merge 当前分支要合并的分支名 -m '合并备注' git merge --no-ff 当前分支要合并的分支名 // 保留分支合并之前的历史提交记录 git merge --squash 当前分支要合并的分支名 // 将分支合并之前多次提交记录合并为一次🎜
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 🎜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
在.gitignored中添加需要过滤的文件
commit, push提交.gitignore 配置这个后其他成员pull后working directory中对应的文件会删除,
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 |
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 |
Das obige ist der detaillierte Inhalt von[Organisation und Freigabe] Einige gängige Git-Befehle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!