首页 > 其他分享 >Git使用

Git使用

时间:2023-11-30 14:22:54浏览次数:38  
标签:HEAD git -- Git master branch 使用 commit

Git使用

配置

git config --global --list   #显示所有的设置
git config --global init.defaultBranch master #设置默认分支名
git config --global user.name "username" #用户名
git config --global user.email "[email protected]" #邮箱

修改git的编辑器

git默认的编辑器为nano,不常用,需要修改为vim,方法如下:打开. git/config文件,在core中添加editor=vim即可

基本命令

  • 将文件写入暂存区
git add file
  • 将文件推送到远程仓库
git push origin master
  • 文件提交到仓库
git commit -m ""
  • 拉取/获取 远程仓库代码
git pull origin master  #自动合并
git fetch origin master #手动合并
  • 查看当前状态
git status
git status -s

本地仓库推送

token

  • 新建的仓库
git init
git add .
git commit -m "first commit"
git remote add origin "https://<token>@github.com/<...>"
git remote set-url origin ...
git push -u origin master
  • 已有仓库
git remote add origin "https://<token>@github.com/<...>"
git push -u origin master
  • remote
git remote set-url origin ... #覆盖此链接
git remote set-url --add origin ... #追加链接
git remote set-url --delete origin ... #删除链接
git remote -v #查看所有
  • 重命名commit
git commit --amend -m ""

ssh

cd ~/.ssh
ssh-keygen -t rsa -C "[email protected]"
# id_rsa.pub config for git remote setting 

git 忽略文件

  • .gitignore
log/*         #忽略log下所有文件
!log/read.txt #除了read.txt
src/*.c       #忽略所有.c
  • 强制忽略命令
git update-index --assume-unchanged <files>  #强制忽略
git update-index --no-assume-unchanged <files>  #取消忽略

有时候上传远程仓库之后发现不小心把应该要忽略的文件或目录给push上去了(如.idea目录),这时候再去编辑project目录下的.gitignore文件并添加忽略已经不起作用了,因为.gitignore只对从来没有commit过的文件起作用。

这时我们可以通过git命令删除已提交的文件或目录,命令如下:

git rm --cached -r .idea

然后编辑project目录下的.gitignore文件(不同位置文件或目录的忽略编辑不同位置的.gitignore文件),比如添加忽略.idea目录,如下:

.idea

在.gitignore文件里边添加上面的内容,然后再进行commit和push,这样就删除了远程的已提交的内容,这样下次提交的时候就不会再提交上面忽略的内容了。

更新仓库

git add .
git commit -m update
git push

工作区与暂存区

Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:

img

git log查看

git help log  #查看帮助
git log -p -1 #显示最近一条提交 并显示内容
git log --oneline #简化显示每个版本只有一行
git log --author tiandeng0702 #按作者查找

git 撤销操作

git reset HEAD <file>  #取消暂存
git reset --soft HEAD^ #撤销commit
git checkout -- <file> #撤销修改 慎用

git 原位替换

将多次提交合并成一个commit

git commit --amend
git commit -m 'initial commit'
git add <forgotton_file>
git commit --amend

git 版本回退(git reset)

git reset --soft <HEAD_NAME> #撤销到指定版本 保留从<HEAD_NAME>上一次修改后的文件以及暂存区 
git reset --hard HEAD^       #撤销到上一个版本 保留从上一次修改后的文件以及暂存区 

git reset --hard <HEAD_NAME> #撤销到指定版本 不保留任何修改的文件
git reset --hard HEAD^       #撤销到上一个版本 不保留任何修改的文件

git reset --mixed <HEAD_NAME> #撤销到指定版本 保留从<HEAD_NAME>上一次修改后的文件,不保留暂存区
git reset --mixed HEAD^       #撤销到上一个版本 保留从上一次修改后的文件,不保留暂存区

# --hard 慎用,但是即使回退之后也有办法回溯
git reflog #查看所有历史记录,找到误操作的 <HEAD>
git reset --hard <HEAD> #恢复误操作之前的最新版本

git 差异(git diff)

git diff          #显示工作区与暂存区的差异
git diff HEAD     #显示工作区与版本库的差异
git diff --cached #显示暂存区与版本库的差异

git diff <HEAD1> <HEAD2> <file> #比较两个版本之间的某个 <file> 的差异
git diff <HEAD1> <HEAD2>  #比较两个版本之间的差异
git diff HEAD^	HEAD  #比较当前版本与上一个版本差异
git diff HEAD~	HEAD  #比较当前版本与上一个版本差异
git diff HEAD~2	HEAD  #比较当前版本与上两个版本差异
git diff HEAD~3 HEAD  #比较当前版本与上三个版本差异

git 删除文件(git rm)

#使用 rm file 只删除文件,暂存区会显示红色的delete, 需要git add file更新暂存区
git rm file #删除文件同时更新暂存区
git rm --cached file #只删除暂存区,文件保留在工作区

git 打标签

#当前提交打标签
git tag -a v1.0 -m "add v4l2_cam" #创建附注标签
git tag -a v1.1 #创建轻量标签               
git tag -l  #显示所有标签
git push origin v1.0 #推送
git tag -d <tagname> #删除标签

git push origin --delete <tagname> #一条命令删除线上和本地

#以前版本打标签
git tag -a v0.9 <HEAD> 

git 别名

git config --global alias.st status

git 分支

image-20220709141601336

git branch #查看分支
git branch <branch name> #直接创建分支
git checkout -b <branch name> #切换并创建分支
git checkout <branch name> #切换分支

git switch #此命令用于替换checkout, 因为checkout 还有恢复功能,switch 可以防止分支名和文件名冲突

git 合并分支

##合并分支,之前先处在主分支
git checkout master
git merge <branch name> #合并分支 不会显示geature,只保留单条分支记录
git merge -no-ff <branch name> #可以保存之前的分支历史,能更好查看merage历史,以及branch状态

git branch -d <branch name> #分支删除,必须在合并主线之后才可以删除
git branch -D <branch name> #分支删除,不合并到主线也能删除

git push origin --delete <branch name> #远端删除分支
git log --graph --oneline --decorate --all #图形显示分支状态

image-20231109000316462

git rebase <branch name> #另一种合并方式,不保留分支历史

分支冲突解决

假设一个文件在 master 中修改一行,它的分支 dev 也修改了同一行

  • 最开始 master 中的 代码
#include <stdio.h>

int main()
{
	printf("world\n");
	return 0;
}

  • 分支dev 修改的代码
#include <stdio.h>

int main()
{
	printf("Go to hell world\n");
	return 0;
}
  • 主分支master 修改的代码
#include <stdio.h>

int main()
{
	printf("Hello world\n");
	return 0;
}
* ecbf279 (HEAD -> master) master commit
| * 6ec5a07 (dev) dev commit
|/  
* 5dbad6e init master

开始合并

ubuntu@rtsp:~/test (master)$ git merge dev master 
Auto-merging main.c
CONFLICT (content): Merge conflict in main.c
Automatic merge failed; fix conflicts and then commit the result.

#出现了冲突
#############################################################################
git status # 使用 git status 查看冲突
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")         # 1. 修改冲突 然后 git commit
  (use "git merge --abort" to abort the merge) # 2. git merge --abort 取消合并 

Unmerged paths:
  (use "git add <file>..." to mark resolution)
	both modified:   main.c

no changes added to commit (use "git add" and/or "git commit -a")
#############################################################################
git diff # 查看具体冲突

diff --cc main.c
index 60aec82,31fae3c..0000000
--- a/main.c
+++ b/main.c
@@@ -2,6 -2,6 +2,10 @@@
  
  int main()
  {
++<<<<<<< HEAD
 +      printf("Hello world\n");
++=======
+       printf("Go to hell world\n");
++>>>>>>> dev
        return 0;
  }

##############################################################################
vim main.c #进行修改

#include <stdio.h>

int main()
{
	printf("Hello and Got to hello world\n");
	return 0;
}

git add.
git commit -m "merg dev"
*   f653c84 (HEAD -> master) merg dev
|\  
| * 6ec5a07 (dev) dev commit
* | ecbf279 master commit
|/  
* 5dbad6e init master

然后删除或者保留 dev 分支

git 回退 (git checkout)

git checkout -b <brance_name> <HEAD>

#e.g.
git chechout -b dev b4d551wad5ad8841

命令行显示git分支

function git_branch {
   branch="`git branch 2>/dev/null | grep "^\*" | sed -e "s/^\*\ //"`"
   if [ "${branch}" != "" ];then
       if [ "${branch}" = "(no branch)" ];then
           branch="(`git rev-parse --short HEAD`...)"
       fi
       echo " ($branch)"
   fi
}

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(git_branch)\[\033[00m\]\$ '
export PS1

转自 https://www.icetdpl.com/posts/Git使用/

标签:HEAD,git,--,Git,master,branch,使用,commit
From: https://www.cnblogs.com/icetdpl/p/17867217.html

相关文章

  • uniapp使用微信jssdk自定义分享
    前言提示:本文记录的是使用uniapp开发的H5+APP项目,H5端使用微信自定义分享功能,文中有关APP的兼容,如果不需要兼容APP的可以忽略一、引入首先安装jweixin-module包npminstalljweixin-module--save二、封装工具方法为了方便使用,新建一个wechat.js文件://#ifdefH5impo......
  • K8S内POD使用内存缓慢增长问题
    背景生产环境服务容器化后,部分服务频繁触发内存使用超80%告警,POD内存限制内存以及JVM内存设置如下resources:requests: cpu:1000m memory:2200Milimits: cpu:3000m memory:3000MiJAVA_OPTS='-Xmx2000m'问题排查步骤通过查看K8Spod的监......
  • macOS 使用 Finder 无法把文件拖到 U盘里面去 bug All In One
    macOS使用Finder无法把文件拖到U盘里面去bugAllInOneU盘/磁盘格式不兼容bug❌formaterrorWindowsNTFileSystem(NTFS)因为NTFS文件系统不是Mac兼容的文件系统,所以默认情况下,macOS系统对于NTFS格式的硬盘是没有“写入”权限的,只有“读取”权限。也就是......
  • 关于layui使用弹出层模版后对应上传组件不工作的问题记录
    这里页面的聊天室是使用的弹出层:util.on('lay-on',{'open-chat-room':function(){layer.open({title:'项目聊天室',type:1,offset:&#......
  • iOS开发_UIKit框架使用总结
    1、经常使用的1.1基础UIView、UILabel、UIImage、UIColor、UIImageView、UITextField、UIButton、UIFont1.2列表UIScrollView、UITableView、UICollectionView、UITextViewUICollectionViewCell、UITableViewCell1.3其他UIViewController2、偶尔使用的2.1功能专用UIPickerView(......
  • 【必读】开发者必备!轻松学习MySQL事务的使用方法
    在日常开发中我们经常会遇到需要同时处理多个操作的情况,比如在购物时,我们需要同时完成支付和更新库存两个操作。这时,如果其中一个操作失败了,我们就需要进行回滚,以保证数据的一致性。那么,如何在MySQL中实现这样的功能呢?答案就是——事务。下面我们就来介绍一下MySQL事务是什么?它......
  • C++使用OpenSSL实现AES-256-CBC加密解密实例----亲测OK
    //AesUtil.h#ifndef__AES_UTIL_H__#define__AES_UTIL_H__#ifdef__cplusplus//告诉编译器,这部分代码按C语言的格式进行编译,而不是C++的extern"C"{#endifstringUTIL_aes_cbc_encrypt(constunsignedchar*password,unsignedintpassword_byte_len,c......
  • C++使用OpenSSL实现Base64编码、解码实例----亲测OK
    摘自:https://www.dandelioncloud.cn/article/details/1498198300963708930 //Base64Util.h#ifndef__BASE64_UTIL_H__#define__BASE64_UTIL_H__#ifdef__cplusplus//告诉编译器,这部分代码按C语言的格式进行编译,而不是C++的extern"C"{#endifstringUTIL......
  • Windows平台的prometheus和Grafana的学习与使用
    Windows平台的prometheus和Grafana的学习与使用背景最近没有了linux机器突然想捯饬一下Windows平台的监控与使用所以总结一一下.第一步下载https://prometheus.io/download/https://grafana.com/grafana/download注意需要下载windows平台的安装介质建议是选择zip包.zip包......
  • 如何使用Selenuim浏览器自动化框架实现自动登录社交媒体账号和自动发布文章
    在当今社交媒体盛行的时代,程序员们经常需要在不同的平台上自动执行一些任务,比如登录社交媒体账号并发布文章。本文将介绍如何利用Selenium浏览器自动化框架实现这一任务,同时结合万媒易发多平台内容同步助手,提高文章发布的效率。技术栈为了实现自动登录社交媒体账号和自动发布文......