git常用操作

135 阅读9分钟

一、git设置

1、下载git(以windows为例)

git下载根据需要下载32位还是64位的包

2、设置git个人信息

config的三个作用域 git config --local 只对某个仓库有效 git config --global 对当前用户的所有仓库有效 git config --system 对系统所有登录的用户有效

2-1、设置git提交信息

git config --global user.name "用户名" git config --global usera.email "邮箱"

2-2、查看config配置,加--list

2-3、查看所有的配置

git config --list

image-5.png

2-4、查看某个作用域的配置local、global、system

git config --list --xxx 示例:

image-6.png

3、ssh秘钥设置

3-1、生成秘钥

ssh-key -o 连续三次回车可以生成

3-2、查看公钥公钥可以放在github、gitlab、工蜂、码云等平台的公钥中配置实现ssh拉取代码等操作

cd ~/.ssh
ls
cat id_rsa.pub

image-8.png

二、git使用

1、克隆仓库

git clone xxxxxxxxxx

image-1.png

2、关联本地仓库与线上仓库

git init #初始化git仓库
git remote add origin 远程仓库地址 #关联远端仓库 origin是远端仓库的别名,可以关联多个远端仓库
git remote -v  #查看远端仓库

image-7.png

3、查看变动的文件

git status

image-2.png

4、将文件暂存

暂存某个文件git add xxx 或 全部暂存git add .

image-3.png

5、撤销文件暂存

撤销单个文件暂存 git reset HEAD xxx 或 撤销全部文件暂存 git reset HEAD .

image-4.png

6、撤销文件修改

6-1、代码在未暂存区

1、如果是新增加的文件
rm -rf filename #移除单个文件
git clean -xdf #删除新增文件,如果文件已经在暂存区不会删除
git clean -xdff #删除新增文件和文件夹,如果文件已经在暂存区不会删除
2、如果不是新增加的文件改动
git checkout -- filename #移除单个文件/文件夹改动
git checkout . #移除所有文件/文件夹改动

6-2、代码在已暂存区

1、先移出暂存区然后如上操作就可以了
git reset HEAD filename #移出单个文件/文件夹
git reset HEAD . #移出所有文件/文件夹

7、文件提交

git add . #暂存全部文件
git commit -m "提交的备注信息" #提交暂存的文件

image-9.png

8、查看提交

git log #查看所有提交
git show #查看最新的提交的改动
git show commitId #查看指定的commitId的改动

image-10.png

9、撤销提交

撤销提交有两种方法

reset #是指将HEAD指针指到先前已存在的历史提交,历史记录中不会出现放弃的提交记录。 
revert #是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在;

9-1、reset撤销代码

git reset HEAD^ # 撤消上一次的commit 不带参数默认是--mixed 例:git reset --mixed HEAD^  也可以写成git reset HEAD~1
git reset HEAD~2 如果你进行了2次commit,想都撤回,可以使用HEAD~2
git reset commitId #撤消指定的commitId
git reset --hard commitId # 回退到指定版本 放弃工作区的所有修改,还原到指定版本的代码

reset的三种模式区别

--soft:不删除工作空间改动代码,撤销commit,不撤销git add .操作,重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

--mixed(默认):不删除工作空间改动代码,撤销commit,并且撤销git add . 操作,重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。

--hard:删除工作空间改动代码,撤销commit,撤销git add . 操作,重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。

注意完成这个操作后,就恢复到了指定版本的commit状态。

9-1-1、git reset --soft HEAD^1 改动的代码会在暂存区里面

image-11.png

9-1-2、git reset --mixed HEAD^1 改动的代码会在未暂存区里面

image-12.png

9-1-3、git reset --hard HEAD^1 改动的代码不会存在

image-13.png

9-1-4 同步远程仓库代码

先本地回退代码然后代码强制推送到线上 -f 强制推送

git push 远程仓库别名 分支 -f

9-2、revert撤销代码 文章参考(www.cnblogs.com/birdy-silho…

(1)这个命令会生成一个新的提交记录,新的提交记录的修改就是把要移除的那次需要移除的提交的修改抵消掉

(2)如果工作区或暂存区还有修改未提交,那么会提示需要先提交或存储起来;

(3)如果在移除的过程中发生了冲突,可以在解决了冲突后,使用 git add添加修改的冲突文件, git revert --continue 来继续操作,如果没有需要提交的,也可以使用 git revert --skip来继续下一步,如果后续还有冲突,也同样如此,直到移除的操作全部完成;当然也可以使用 git revert --abort 来停止移除操作,恢复到执行git revert 之前的状态。

#撤销前n次提交并生成一次新的提交
git revert -n HEAD~n 	

#回到某次提交
git revert -n 版本号
然后重新push
注意revert功能是撤销某次提交而不是撤销到某次提交,-n取消自动提交

原理: git revert是用于“重做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如下图所示:

image-14.png

使用 git revert 可以撤销指定的提交, 要撤销一串提交可以用 .. 语法。 注意这是一个前开后闭区间,即不包括 commit1,但包括 commit2。 下面示例中“commit -4”变为commitId(fc0677aefe8de5a79badb03c10c943a4ce942ad5)对应的"hahhahah"但中间的记录不会消失会在后面新增一条提交记录

image-15.png

image-16.png

10、打标签

10-1、列出所有标签

Git 中列出已有的标签非常简单,只需要输入 git tag (可带上可选的 -l 选项 --list

git tag or git tag -l or git tag --list

10-1、创建标签(支持两种标签轻量标签(lightweight)与附注标签(annotated) )

轻量标签很像一个不会改变的分支——它只是某个特定提交的引用。而附注标签是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。 通常会建议创建附注标签,这样你可以拥有以上所有信息。但是如果你只是想用一个临时的标签, 或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。

10-1-1、附注标签

在 Git 中创建附注标签十分简单。 最简单的方式是当你在运行 tag 命令时指定 -a 选项:

-m 选项指定了一条将会存储在标签中的信息。 如果没有为附注标签指定一条信息,Git 会启动编辑器要求你输入信息。

通过使用 git show 命令可以看到标签信息和与之对应的提交信息

 git tag -a v1.0.0 -m "测试打标签"
 git show v1.0.0

image.png

10-1-2、轻量标签

另一种给提交打标签的方式是使用轻量标签。 轻量标签本质上是将提交校验和存储到一个文件中——没有保存任何其他信息。 创建轻量标签,不需要使用 -a-s 或 -m 选项,只需要提供标签名字

image.png

10-2、后期打标签

git log --pretty=oneline #查看之前提交的commitId列表
git tag -a v1.0.4 aad1be9d45 -m "给之前的提交打tag" #给之前的commitId为aad1be9d45打tag
git show v1.0.4 #查看tag的信息

image.png

10-3、共享标签(同步标签到仓库中)

10-3-1、同步单独的一个标签

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样——你可以运行 git push origin "tagname"。

image.png

image.png

10-3-2、同步所有标签

如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里

image.png

image.png

10-4、删除标签

要删除掉你本地仓库上的标签,可以使用命令 git tag -d 'tagname'

image.png

删除远程仓库的标签 git push origin --delete 'tagname'

10-5、检出标签

如果你想查看某个标签所指向的文件版本,可以使用 git checkout 命令, 虽然这会使你的仓库处于“分离头指针(detached HEAD)”的状态——这个状态有些不好的副作用:

$ git checkout 2.0.0
Note: checking out '2.0.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch>

HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final

$ git checkout 2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... add atlas.json and cover image

在“分离头指针”状态下,如果你做了某些更改然后提交它们,标签不会发生变化, 但你的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问。 因此,如果你需要进行更改,比如你要修复旧版本中的错误,那么通常需要创建一个新分支:

$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'

如果在这之后又进行了一次提交,version2 分支就会因为这个改动向前移动, 此时它就会和 v2.0.0 标签稍微有些不同,这时就要当心了。