Git 命令一览

2023-12-15 15:03:08

一,常用操作

# 将所有修改的文件从工作区放入暂存区

git?add?./?????-->?放入暂存区

#?添加commit信息,文件从暂存区提交到本地仓库

git?commit?-m?'xxx'??-->?提交到本地仓库

#?拉取远程主机某个分支,再与本地分支合并

git?pull??-->?远程与本地合并

#?把本地仓库的所有内容推送到远程仓库

git?push?????-->?推送到远程仓库

#首次添加远程分支?(分支特性-时间-?版本号)

git?push?--set-upstream?origin?fix-202312-1.0.11

#?删除远程分支;

git?push?origin?--delete?xxxxx???/????git?branch?-d?xxxx

#更新远程分支

git?remote?update?origin?-p

以commit?或者?Tag?创建新的分支

git?checkout?-b?<branch?name>?<SHA1>

git?checkout?-b?<New?Branch?Name>?<TAG?Name>

在当前分支上执行git?stash命令。将当前分支存起来,id为?84c682f;

用??git?stash?list?命令去查看我们“存储”的列表;

git?push?--force?origin?master??//?强制推送

分析:这是由于你拉取pull分支前,进行过merge合并更新分支操作,而其他人在你之前已经push过一个版本,导致版本不一致

第一种解决方法:比较简单

执行git?config?pull.rebase?false

默认将pull下来的代码与现有改动的代码进行合并

但是可能会造成代码冲突,需要处理下这个问题,代码冲突如果2个人都改了同一个文件,需要联系之前push的同学,看看这块代码怎么保存

1.1?新建代码库

#?在当前目录新建一个Git代码库?git?init

#新建一个目录,将其初始化为Git代码库?git?init?[project-name]?

#?下载一个项目和它的整个代码历史?git?clone?[url]

1.2?配置

#?设置提交代码时的用户信息

git?config?[--global]?user.name?"[name]"

?git?config?[--global]?user.email?"[email?address]"

1.3?remote管理

#?查看远程主机网址?git?remote?-v?

#?删除远程主机?git?remote?rm?origin?

#?添加远程主机?git?remote?add?origin?https:git.xxxx.git?

1.4添加和撤销操作

#?该文件内容恢复到上个commit状态?git?checkout?--?<file>????

#?所有文件恢复到上个commit状态?git?checkout?.??

#?回退到某个版本?git?reset?–-hard?f109e83a5ae23766c86e9d259d18271a3ab53c16

#回退所有内容到上一个版本??git?reset?HEAD^?

以某个commit?创建分支?

git?checkout?fbcdb83774c325b8383dd1f9a758ebbec5d9723d?-b?test_2401?//?12-02

git?checkout?6f9cc664bb78b982b63305217369fc7d3084b626?-b?test_2401

大概意思是本地库和远程库没有同步导致无法提交合并,冲突导致无法push

git?pull?origin?main?--allow-unrelated-histories?//从远端仓库拉去不相关历史
git?push?origin?main?//推送到远端main分支

1.6?tag操作

#?展示标签
git?tag
#?打标签和注释
git?tag?-a?v0.1.2?-m?"0.1.2版本"
#?给指定的commit打标签
git?tag?-a?v0.1.1?9fbc3d0
#?git?push?操作不会将tag上传到服务器,需要单独上传,将v0.1.2标签提交到git服务器
git?push?origin?v0.1.2
#?将本地所有标签一次性提交到git服务器
git?push?origin?--tags
#?删除标签
git?tag?-d?v0.1.2
#?删除远程的tag
git?push?origin?--delete?tag?<tagname>?

二?分支操作

#?列出所有本地分支和远程分支
git?branch?-a
#?创建并切换分支
git?checkout?-b?test
#?切换到远程分支
git?fetch
git?checkout?-b?test?origin/test
#?新建一个分支,指向指定commit
git?branch?[branch]?[commit]
#?新建一个分支,指向某个tag
git?checkout?-b?[branch]?[tag]
#?合并指定分支到当前分支
git?merge?[branch]
#?选择一个commit,将该commit改动下的代码合并进当前分支
git?cherry-pick?[commit]

,其它汇总

2.1?github上初始一个项目

echo?"#?ceshi"?>>?README.md
git?init
git?add?README.md
git?commit?-m?"first?commit"
git?remote?add?origin?git@github.com:archer-wong/ceshi.git
git?push?-u?origin?master

2.2?重命名远程分支

(先删除远程分支,重命名本地分支,最后提交一个新的远程分支)

git?push?--delete?origin?devel
git?branch?-m?devel?develop
git?push?origin?develop

2.3.gitignore文件

.gitignore?配置文件用于配置不需要加入版本管理的文件

1、语法:

所有空行或者以?#?开头的行都会被?Git?忽略。

可以使用标准的?glob?模式匹配。

匹配模式可以以(/)开头防止递归。

匹配模式可以以(/)结尾指定目录。

要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

所谓的?glob?模式是指?shell?所使用的简化了的正则表达式。?

星号(*)匹配零个或多个任意字符;

[abc]匹配任何一个列在方括号中的字符(这个例子要么匹配一个?a,要么匹配一个?b,要么匹配一个?c);

问号(?)只匹配一个任意字符;

如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如?[0-9]?表示匹配所有?0?到?9?的数字)。?

使用两个星号(*)?表示匹配任意中间目录,比如a/**/z?可以匹配?a/z,?a/b/z?或?a/b/c/z等。

2、示例:

#?忽略?.a?文件
*.a
#?否定忽略?lib.a,?尽管已经在前面忽略了?.a?文件
!lib.a
#?仅在当前目录下忽略?TODO?文件,?但不包括子目录下的?subdir/TODO
/TODO
#?忽略?build/?文件夹下的所有文件
build/
#?忽略?doc/notes.txt,?不包括?doc/server/arch.txt
doc/*.txt
#?忽略所有的?.pdf?文件?在?doc/?directory?下的
doc/**/*.pdf

???3、.gitignore不生效问题

如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git?rm?-r?--cached?.
git?add?.
git?commit?-m?'update?.gitignore'

四,合并冲突解决

需要你在本地把master合到你的发布分支,解决完冲突之后,再push到远端

git?merge?master?--allow-unrelated-histories

问题复现

在master分支已经做了一些提交,这个时候想要切换到dev分支。

如果修改的文件未提交时,当切换分支的时候会提示以下错误信息

error:?Your?local?changes?to?the?following?files?would?be?

英文大意:当切换分支的时候,你当前修改的文件将会被覆盖,所以git需要你先提交你的变动或者在你切换分支之前暂存它们。

根据提示有两种解决方案

提交当前的变动(此方案会多出来一条提交记录)

git?add?.

git?commit?-m?"切换分支之前暂存变动"

使用stash命令,此操作会将你当前工作区已修改未提交的内容暂存起来。并且以上一次提交的commit?信息作为记录。

git?stash

五、Mac系统下查看和生成SSH?Key

什么是公钥

  • 很多服务器都是需要认证的,ssh认证是其中的一种。在客户端生成公钥,把生成的公钥添加到服务器,你以后连接服务器就不用每次都输入用户名和密码了。
  • 很多git服务器都是用ssh认证方式,你需要把你生成的公钥发送给代码仓库管理员,让他给你添加到服务器上,你就可以通过ssh自由地拉取和提交代码了。

一、打开vim(terminal.app)查看本地是否存在SSH-Key
ls?-al?~/.ssh
>>?如果vim输出的是如下内容:证明本地没有生成的SSH?Key,请执行第二步。
No?such?file?or?directory
>>?如果vim输出的是如下内容:?证明本地已经存在SSH?Key?文件,请执行第四步。
id_rsa????????id_rsa.pub

二、如果没有,生成新的SSH?Key
ssh-keygen?-t?rsa?-C"you_email"

?三、生成并添加SSH?Key
ssh-add?~/.ssh/id_rsa

四、查看SSH?Key
cat?.ssh/id_rsa.pub

六、Windows查看本机SSH公钥,生成公钥

  1. 查看?ssh?公钥方法:

我们要想生成SSH?key,首先就得先安装?SSH,对于?Linux?和?Mac?系统,其默认是安装?SSH?的,而对于?Windows?系统,其默认是不安装?SSH?的,不过由于我们安装了?Git?Bash,其也应该自带了?>SSH.?可以通过在?Git?Bash?中输入ssh命令,查看本机是否安装?SSH:

此结果表示我们已经安装?SSH?啦!接下来,输入ssh-keygen?-t?rsa命令,表示我们指定?RSA?算法生成密钥,然后敲三次回车键,期间不需要输入密码,之后就就会生成两个文件,分别为>id_rsa和id_rsa.pub,即密钥id_rsa和公钥id_rsa.pub.?对于这两个文件,其都为隐藏文件。

  1. 打开你的?git?bash?窗口
  2. 进入?.ssh?目录:cd?~/.ssh
  3. 找到?id_rsa.pub?文件:ls
  4. 查看公钥:cat?id_rsa.pub?或者?vim?id_rsa.pub

文章来源:https://blog.csdn.net/weixin_49307011/article/details/135015485
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。