文章目录

  • 一、分支操作
  • 二、暂存操作
  • 三、回退操作
  • 四、标签操作
  • 五、常规操作
  • 六、git创建项目仓库
  • 七、忽略已加入到版本库中的文件
  • 八、取消忽略文件
  • 九、拉取、上传免密码
  • 十、Git使用实践
  • 十一、如何将本地代码上传到GitHub?
  • 十二、git push和pull每次都要输入密码

一、分支操作

  • git branch 创建分支

  • git branch -b 创建并切换到新建的分支上

  • git checkout 切换分支

  • git branch 查看分支列表

  • git branch -v 查看所有分支的最后一次操作

  • git branch -vv 查看当前分支

  • git brabch -b 分支名 origin/分支名 创建远程分支到本地

  • git branch --merged 查看别的分支和当前分支合并过的分支

  • git branch --no-merged 查看未与当前分支合并的分支

  • git branch -d 分支名 删除本地分支

  • git branch -D 分支名 强行删除分支

  • git branch origin :分支名 删除远处仓库分支

  • git merge 分支名 合并分支到当前分支上

通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来

禁用”Fast forward”模式。

二、暂存操作

  • git stash 暂存当前修改

  • git stash apply 恢复最近的一次暂存

  • git stash pop 恢复暂存并删除暂存记录

  • git stash list 查看暂存列表

  • git stash drop 暂存名(例:stash@{0}) 移除某次暂存

  • git stash clear 清除暂存

三、回退操作

  • git reset --hard HEAD^ 回退到上一个版本

  • git reset --hard ahdhs1(commit_id) 回退到某个版本

  • git checkout – file撤销修改的文件(如果文件加入到了暂存区,则回退到暂存区的,如果文件加入到了版本库,则还原至加入版本库之后的状态)

  • git reset HEAD file 撤回暂存区的文件修改到工作区

四、标签操作

  • git tag 标签名 添加标签(默认对当前版本)

  • git tag 标签名 commit_id 对某一提交记录打标签

  • git tag -a 标签名 -m ‘描述’ 创建新标签并增加备注

  • git tag 列出所有标签列表

  • git show 标签名 查看标签信息

  • git tag -d 标签名 删除本地标签

  • git push origin 标签名 推送标签到远程仓库

  • git push origin --tags 推送所有标签到远程仓库

  • git push origin :refs/tags/标签名 从远程仓库中删除标签

五、常规操作

  • git push origin test 推送本地分支到远程仓库

  • git rm -r --cached 文件/文件夹名字 取消文件被版本控制

  • git reflog 获取执行过的命令

  • git log --graph 查看分支合并图

  • git merge --no-ff -m ‘合并描述’ 分支名 不使用Fast forward方式合并,采用这种方式合并可以看到合并记录

  • git check-ignore -v 文件名 查看忽略规则

  • git add -f 文件名 强制将文件提交

  • git clone http://username:password@链接,例如http://zhangsan:123456@gitee.com/abc/def.git clone远程仓库到本地

六、git创建项目仓库

  • git init 初始化

  • git remote add origin url 关联远程仓库

  • git pull

  • git fetch 获取远程仓库中所有的分支到本地

七、忽略已加入到版本库中的文件

  • git update-index --assume-unchanged file 忽略单个文件

  • git rm -r --cached 文件/文件夹名字 (. 忽略全部文件)

八、取消忽略文件

git update-index --no-assume-unchanged file

九、拉取、上传免密码

git config --global credential.helper stor

十、Git使用实践

  • 1、首先安装Git

  • 2、创建一个文件夹,用来创建Git的版本库

  • 3、进入文件夹,通过下面的命令创建本地仓库,从而实现对版本库的管理

git init

发现创建了一个.git文件夹,不要随便改动里面的文件

  • 4、创建文件jiege.go之后

  • 5、通过git status查看git状态

$ git status
On branch masterNo commits yetUntracked files:(use "git add <file>..." to include in what will be committed)jiege.gonothing added to commit but untracked files present (use "git add" to track)
  • 6、添加文件到本地仓库
$ git add  jiege.go

如果成功了,就没有任何提示。俗话说:没有消息,就是最好的消息。。。

此时查看状态:

$  git status
On branch masterNo commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file:   jiege.go

Git发现一个新文件a.txt

  • 7、提交文件
$ git commit -m "杰哥的技术杂货铺"
[master a96f8bb] create new file a.txt1 file changed, 1 insertion(+)create mode 100644 a.txt

-m为此次提交说明,提交到master分支,一个文件修改,插入一行数据,创建模式

git commit只是提交暂存区的修改,也就是只有先git add之后,才能commit成功

$ git commit -m "uodate code"
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   jiege.gono changes added to commit (use "git add" and/or "git commit -a")

修改了a.txt,但是提交发现没有任何改变
可以add多个文件,然后统一提交。

  • 8、git diff

此时我们修改jiege.go,通过git status只能查看到文件被修改,如果想要查看修改什么内容,可以通过git diff jiege.go查看

$ git diff jiege.go
diff --git a/jiege.go b/jiege.go
index e69de29..a71442f 100644
--- a/jiege.go
+++ b/jiege.go
@@ -0,0 +1 @@
+csdn-杰哥的技术杂货铺
\ No newline at end of file
  • 9、git提交日志
$ git log
commit cfdec9d56f585142dae56146337d6ec4c177abeb (HEAD -> master)
Author: lijie@lianjingkeji.com <lijie@lianjingkeji.com>
Date:   Tue Jul 5 19:41:22 2022 +0800杰哥的技术杂货铺

查看到提交一次,包括每次提交生成的加密ID,时间,提交说明

也可以将每次提交日志显示在一行,进行格式化美化:

$ git log --pretty=oneline
cfdec9d56f585142dae56146337d6ec4c177abeb (HEAD -> master) 杰哥的技术杂货铺
  • 10、版本回退

如果我们想要回退版本,可以使用git reset命令,Git用HEAD表示当前版本,HEAD^表示上一个版本,如果是前100个版本呢,可以使用HEAD~100

回到上个版本:

$ git reset --hard HEAD^
HEAD is now at 93ed719 modify jiege.go

回到任意一个版本,需要知道提交的ID

$ git reset --hard 6bab7bd9dfef4504b5a51e6c5b53c53272741ce0
HEAD is now at 6bab7bd add three line
  • 11、Git所有操作日志

与git log不同的是,git reflog可以显示对git的所有操作日志

$ git reflog
6bab7bd (HEAD -> master) HEAD@{0}: reset: moving to 6bab7bd9dfef4504b5a51e6c5b53c53272741ce0
93ed719 HEAD@{1}: reset: moving to HEAD^
6bab7bd (HEAD -> master) HEAD@{2}: commit: add three line
93ed719 HEAD@{3}: commit: modify jiege.go
a96f8bb HEAD@{4}: commit: create new file a.txt
5e9a9b2 (origin/master) HEAD@{5}: commit (initial): Red Black Tree Commit

我们可以看到不仅仅有commit,还有reset的操作等

  • 12、撤销修改/删除

git checkout命令把工作区的修改撤销,这里分为两种情况:

  1. jiege.go修改过后还没add到暂存区,撤销之后和版本库保持一致。

  2. jiege.go修改后已经add到暂存区了,撤销之后就是加入暂存区的状态。

这种情况下的解决方案:注意–和jiege.go之间有空格

$ git reset HEAD jiege.go  #首先回到当前版本,就可以把暂存区的修改撤销,然后就属于第一种情况了
Unstaged changes after reset:
M       jiege.go$ git checkout -- jiege.go    #撤销工作区的修改
  • 13、删除文件

工作区删除了jiege.go,通过git status可以查看到

如果想要删除文件:

$ git rm jiege.go
rm 'a.txt'
$ git commit -m "delete jiege.go"
[master a708588] delete jiege.go1 file changed, 3 deletions(-)delete mode 100644 jiege.go

如果是误删:

$ git checkout -- jiege.go
  • 14、远程仓库:

个人使用远程仓库可以选择GitHub、Gitee,本人公司使用Gitlab

这里忽略GitHub上一些相关配置,绑定用户名密码等操作,因为我本身之前已经建立远程仓库了。

与远程仓库关联:远程仓库名称默认origin

git remote add origin https://github.com/lijie9703/rust-tron.git

本地库的内容推送到远程:

$ git push -u origin master
Enumerating objects: 17, done.
Counting objects: 100% (17/17), done.
Delta compression using up to 8 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (16/16), 1.41 KiB | 240.00 KiB/s, done.
Total 16 (delta 0), reused 0 (delta 0)
To https://github.com/huigelaile1234/Huige.git5e9a9b2..6e8c255  master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

PS:

加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,

在以后的推送或者拉取时就可以简化命令。

后面只要本地作了提交,就可以通过如下命令把本地master分支的最新修改推送到github上了,现在你就拥有了真正的分布式版本库了。

git push origin master

远程仓库克隆:

$ git clone https://github.com/lijie9703/rust-tron.git
Cloning into 'rust-tron'...
remote: Enumerating objects: 31, done.
remote: Counting objects: 100% (31/31), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 31 (delta 5), reused 30 (delta 4), pack-reused 0
Unpacking objects: 100% (31/31), done.

创建分支:

$ git checkout -b dev                #创建一个新的分支,-b相当于下面两个命令
Switched to a new branch 'dev'
D       jiege.go$ git branch dev
$ git checkout dev
Switched to branch 'dev'$ git branch    #查看分支,*表示当前分支为dev
* devmaster

我们在dev分支的操作,对于master是不可见的,例如我们修改了miaosha.txt,切换到master后,发现修改的内容没了,所以需要合并分支,

然后删除分支

$ git merge dev            #将dev分支的内容合并到当前分支
Updating d806f1c..f2c990e
Fast-forwardmiaosha.txt | 1 +1 file changed, 1 insertion(+)$ git branch -d dev        #删除分支
Deleted branch dev (was f2c990e).

解决冲突:

我们在master分支对jiege.go的第二行,添加一个词:master,在dev分支对jiege.go的第二行,添加一个词:dev,分别进行add和commit

$ git merge dev        #发生冲突
Auto-merging jiege.go
CONFLICT (content): Merge conflict in jiege.go
Automatic merge failed; fix conflicts and then commit the result.

查看冲突:both modified:jiege.go

$ git status
On branch master
Your branch is ahead of 'origin/master' by 6 commits.(use "git push" to publish your local commits)You have unmerged paths.(fix conflicts and run "git commit")(use "git merge --abort" to abort the merge)Unmerged paths:(use "git add <file>..." to mark resolution)both modified:   jiege.gono changes added to commit (use "git add" and/or "git commit -a")

git log查看分支的合并情况:

$ git log --graph --pretty=oneline --abbrev-commit
*   bf37303 (HEAD -> master) resolve conflict
|\
| * 21e732b (dev) dev commit
* | a3d4dc7 master commit
|/
* b2c0a33 dev commit
* f2c990e aaa
*   bf37303 (HEAD -> master) resolve conflict
|\
| * 21e732b (dev) dev commit
* | a3d4dc7 master commit
|/
* b2c0a33 dev commit
* f2c990e aaa
* d806f1c a
* 3b0963a commit
* 82f5ce0 create new file miaosha.txt

需要先解决冲突,然后在进行提交,最后删除分支。

禁用Fast Forward模式:

合并分支时,–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过

合并。

Bug分支:

现在在master分支开发一个需求,突然来了一个bug,只能创建一个bug分支,去解决这个bug,你需要先把master的代码提交才能切换到bug

分支。但是你还没有开发完毕,不想提交,这时候就需要git stash把这部分代码藏起来。

$ git status    #修改文件,查看状态
On branch master
Your branch is ahead of 'origin/master' by 12 commits.(use "git push" to publish your local commits)Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   a.txtmodified:   b.txtno changes added to commit (use "git add" and/or "git commit -a")$ git stash    #把修改隐藏
Saved working directory and index state WIP on master: 9109e8d meger bug fix 001$ git status    #重新查看,发现没有update了
On branch master
Your branch is ahead of 'origin/master' by 12 commits.(use "git push" to publish your local commits)nothing to commit, working tree clean
$ git checkout -b issue-001            #在需要分支上创建bug分支,并切换到bug分支
Switched to a new branch 'issue-001'$ git add b.txt$ git commit -m "fix bug"        #解决bug
[issue-001 d23090d] fix bug1 file changed, 1 insertion(+)create mode 100644 b.txt$ git checkout master        #切换到master分支
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 10 commits.(use "git push" to publish your local commits)$ git merge --no-ff -m "meger bug fix 001" issue-001    #合并代码
Merge made by the 'recursive' strategy.b.txt | 1 +1 file changed, 1 insertion(+)create mode 100644 b.txt$ git stash list    #查看stash list
stash@{0}: WIP on master: df1b58c a$ git stash pop    #恢复stash之前状态
On branch master
Your branch is ahead of 'origin/master' by 12 commits.(use "git push" to publish your local commits)Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   a.txtno changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (b15629eb0747dc4e2cc1e9ff44e685f20d07d91b)$ git status    #此时状态已经恢复
On branch master
Your branch is ahead of 'origin/master' by 12 commits.(use "git push" to publish your local commits)Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   a.txtno changes added to commit (use "git add" and/or "git commit -a")

stash恢复的方式有两种:

1、git stash apply:但是恢复后,stash内容并不删除,你需要用git stash drop来删除

2、git stash pop:恢复的同时把stash内容也删了

Feature分支:

如果你创建一个分支,开发完成之后,切换回原来的分支,还没来得及合并,需要强制删除和其修改的代码,可以强行删除

$ git branch -D feature-vulcan
Deleted branch feature-vulcan (was 287773e).

参考文档:

  • https://www.liaoxuefeng.com/wiki/896043488029600
  • https://www.cnblogs.com/huigelaile/p/10913471.html

十一、如何将本地代码上传到GitHub?

    1. 先在GitHub上建立一个空的远程代码仓库
      点击创建新的存储库
  • 2、先把新建的代码仓库https链接拷贝出来

  • 3、在本地代码根目录下右键打开Git Bash

  • 4、输入命令git init在文件夹初始化本地仓库:

$ git init
  • 5、输入命令git add . 将该目录下所有文件添加到本地仓库:
$ git add .
  • 6、输入命令git commit -m “描述” 将刚刚添加的文件提交到本地仓库;
$ git commit -m "代码提交"
  • 7、输入命令git remote add origin https://github.com/lijie9703/AAA.git 与GitHub上新建的远程仓库建立连接:
$ git remote add origin https://github.com/lijie9703/AAA.git
  • 8、最后输入命令git push -u origin master 把文件push到远程仓库
$ git push origin master

刷新GitHub上的新建的仓库页面,即可看到刚刚提交的代码

注意:我们刚刚提交的是master分支,github默认是main分支,需要在页面中切换分支才可以看到

十二、git push和pull每次都要输入密码

Git命令默认每次都需要输入帐号和密码,使用以下的命令配置好之后,再执行git pull,然后会最后一次提示输入账号和密码,之后就不再次输入密码

git config --global credential.helper store

日常开发中,你需要掌握的git使用技巧相关推荐

  1. NC65在日常开发中常用的代码写法

    标题 NC65开发相关代码 版本 1.0.1 作者 walton 说明 收集NC在日常开发中常用的代码写法,示例展示 1.查询 1.1 通过BaseDAO查询结果集并转换 //通过BaseDAO进行查 ...

  2. JAVA日常开发中常用的日志记录方式,攒个赞好不好?

    引言: 日志大家都再熟悉不过了,日常开发中经常要用到,甲方接口人最喜欢对我说的话就是"赶紧去查一下日志,快点!",说话的同时瞪着个铜铃大的眼睛. 就你接口人知道日志吗?还要你指挥啊 ...

  3. android 4.4 禁止下拉,Android开发中禁止下拉式的实现技巧

    我们开发项目的时候,经常会看到禁止的情况,而Android开发中并没有直接调用的接口,下面是爱站技术频道小编就给大家介绍的Android开发中禁止下拉式的实现技巧,希望网友们喜欢! 分享给大家供大家参 ...

  4. Win10 UWP开发中的重复性静态UI绘制小技巧 1

    Win10 UWP开发中的重复性静态UI绘制小技巧 1 原文:Win10 UWP开发中的重复性静态UI绘制小技巧 1 介绍 在Windows 10 UWP界面实现的过程中,有时会遇到一些重复性的.静态 ...

  5. git ssh配置文件 服务器_【GIT】日常开发中的这些Git技巧你知道吗?

    Git是目前世界上最先进的分布式版本控制系统 0 git安装 1)在github下载git的release版本 git-release 2)安装git的依赖文件 sudo apt-get instal ...

  6. 日常工作中常用的几个git指令

    前言 最近,我的主管让我就git 使用做个组内分享,分享一下我在日常工作中是如何使用git的.现在我整理成文章,分享出来,希望对你有所帮助. 基础概念 git有三个分区,分别是: 工作区(Workin ...

  7. 日常开发中常用到哪些设计模式

    前言 平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了.如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码.今天跟大家聊聊日常工作中,我都使用过哪些 ...

  8. git stash 强制恢复_开发中必须要掌握的 Git 技巧

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:你喜欢吃青椒么 juejin.im/post/5d157bf3f265da1bcc1 ...

  9. git 修改分支名字_开发中必须要掌握的 Git 技巧

    前言 本文是参考杜老师的Git资料再加上我自己对Git的理解,记录我的Git学习历程,作下此文是为以后学习,工作,开发中如果遇到问题可以回过头来参考参考.因为水平有限,难免会有出错的地方,欢迎指正. ...

  10. 20 个JavaScript基本代码片段,解决你日常开发中的常见问题

    英文 | https://levelup.gitconnected.com/20-essential-snippets-to-code-like-a-pro-in-javascript-c7a6ef4 ...

最新文章

  1. 2022-2028年中国盲盒行业市场研究及前瞻分析报告
  2. 电子商务领域的三股势力
  3. 我眼中的Linux设备树(二 节点)
  4. Python面向对象-特殊成员
  5. extern用法详解
  6. C++ unsigned long 转化为 unsigned char*
  7. 论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data
  8. php 警告和错误屏蔽
  9. python学习笔记15-执行环境
  10. HCNA每日一练错误
  11. AT4RE Patcher v0.6.3使用心得:
  12. 手机app的性能测试工具——GT、、Emmagee
  13. PostgreSQL数据库——Pigsty grafana Ansible
  14. 2022年人工智能数据标注产业现状分析
  15. 加密狗加密excel ,方法之 C#开发Excel自定义函数
  16. 2020秋招腾讯群面场景题:给莫高窟设计一款互联网+产品
  17. excel 关联数据
  18. linux服务器挂载移动硬盘后移动文件报错
  19. 树莓派系统+arduino单片机+双目摄像头 搭载小车
  20. 威客witkey扫盲

热门文章

  1. 遭遇木马Trojan.PSW.ZhengTu.dm、Trojan.PSW.LMir.atb
  2. Java可变参数应用实操
  3. Junit单元测试总结
  4. Redis【4】 - 主从复制、心跳机制、哨兵
  5. 如何查看Windows和Office是不是永久激活
  6. Linux启动ssh服务并改端口号,修改ssh端口的详细步骤
  7. Java随机数生成(简单)
  8. 50题(ACM学习推荐题)
  9. 1980年图灵奖--查尔斯·霍尔简介
  10. 什么是EDI在线数据处理与交易处理业务