【GIT】git 操作类型

目录

分支策略

克隆操作

设置操作

设置user和email

设置彩色显示

查看操作

查看状态git status

 查看当前设置

查看未push的commit  git cherry -v

查看某次commit的内容git show commitId

切换到某个commit 

显示区别git diff

查看某一行代码的修改历史:谁修改的git blame

查看日志git log|查看某个人的|某次commit的

查看某一行代码是谁写的|文件谁提交的

 查看分支合并图

修改|提交操作

git commit --amend追加信息|修改

修改之前的某次注释

修改之前的某几次注释

已经将代码push到远程仓库

暂存操作

撤销操作

撤销工作区(修改)--还没add的用checkout

撤销push,撤销commit

撤销push,撤销commit,撤销add

分支管理

删除分支

从已有分支拉出新分支

代码回滚

丢弃未跟踪的本地修改

取消文件跟踪

拉取一个新分支

 合并分支

 删除分支

GIT说明手册

学习GIT的动态网

从远程仓库获取最新代码合并到本地分支

2.git fetch + merge: 获取最新代码到本地,然后手动合并分支

恢复错误的操作


分支策略


实际开发中的基本分支管理原则:

  • master分支应该是非常稳定的,仅用来发布新版本,平时不能在上面干活;
  • 干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
  • 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

克隆操作

git clone 项目到本地指定目录

git clone https://git.coding.net/gamedaybyday/HelloGit.git    D:\Git\HelloGit

设置操作

在git中,我们使用git config 命令用来配置git的配置文件,git配置级别主要有以下3类:

1、仓库级别 local 【优先级最高,作用域最小】每个仓库可以不一样

2、用户级别 global【优先级次之,作用域中等】当前登陆这台计算机的用户,在所有仓库都用这个配置

3、系统级别 system【优先级最低,作用域最大】作整台计算机,不管登陆那个帐号,不管哪个项目

设置user和email

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

设置彩色显示

git config --global color.ui true     开启彩色显示

git config --global color.ui false   关闭彩色显示

查看操作

查看状态git status

git status    查看状态

git status -s  查看状态,简短输出(M - 修改, A - 添加, D - 删除, R - 重命名,?? - 未追踪)。

 查看当前设置

查看系统config
git config --system --list
查看当前用户(global)配置
git config --global  --list
 查看当前仓库配置信息
git config -- local    --list
 

查看未push的commit  git cherry -v

git cherry -v

显示结果类似于这样:

+ b6568326134dc7d55073b289b07c4b3d64eff2e7 add default charset for table items_has_images
+ 4cba858e87752363bd1ee8309c0048beef076c60 move Savant3 class into www/includes/class/

查看某次commit的内容git show commitId

git show commitId

切换到某个commit 

1.git log //找到你的日志commit号为22dfbf1f907764c5ae70381b8191104f9af21d8c

2.git checkout 22dfbf1f907764c5ae70381b8191104f9af21d8c //切换到这个commit下
3.git checkout -b dev_2.0 22dfbf1f907764c5ae70381b8191104f9af21d8c //在本地新建一个dev_2.0分支
4.git branch //查看分支
5.git push --set-upstream origin dev_2.0 //将本地dev_2.0分支推到远程

显示区别git diff

尚未缓存的改动:git diff 

显示摘要而非整个 diff:git diff --stat 

查看已缓存的改动: git diff --cached (推荐使用新命令 git diff --stage)

查看已缓存的与未缓存的所有改动:git diff HEAD 

查看某一行代码的修改历史:谁修改的git blame

查看某行代码谁写的:

git blame file_name
git blame -L 58,100 file_name  # 58~100   行代码
git blame -L 58,+20 file_name  # 58~58+20 行代码

其输出格式为:

commit_ID | 代码提交作者 | 提交时间 | 代码位于文件中的行数 | 实际代码 

根据 commit_ID 可以查看对应的提交记录:

git show commit_ID

查看日志git log|查看某个人的|某次commit的

git log      可以显示所有提交过的版本信息,不包括已经被删除的 commit 记录和 reset 的操作

git reflog  是显示所有的操作记录,包括提交,回退的操作。一般用来找出操作记录中的版本号,进行回退。git reflog  常用于恢复本地的错误操作。

git log --author="author"   查找某一个作者所有的提交

git log --since='2021-05-21' --until='2021-05-28'   #查询一定时间范围的日志

git show commitId            查看某次commit的内容

git log -p -n        查看最近几次提交的修改内容,n为数字,表示最近n次的修改内容

git log --reverse  逆序  

git shortlog --format='%H|%cn|%s' | grep '#2230'           查找commit里面包含某些字符的log日志
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative     查看定制化显示效果:

查看某一行代码是谁写的|文件谁提交的

git blame index.js    #查询index.js文件的提交记录

git blame -L 5,9  文件名    #查文件第 5 行到第 9 行的提交记录

 查看分支合并图

 git log --graph

git log 来显示 commit date 而不是 author date 

 git log --pretty = fuller - 这会显示两个日期。如果您只想查看一个日期,但将其作为提交日期,则可以使用 git log --format =< some stuff> 。用于定义格式的所有允许代码均记录在 git help log 。提交日期是%cd ,%cD ,%cr ,%ct 或%ci 


git log --since='2021-05-21' --until='2021-05-28' --format='%aN' | sort -u | while read name; do echo -en "$name,";

git log --since='2021-05-21' --until='2021-05-28' --author="$name" --numstat --pretty=tformat: --no-merges | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines, %s, removed lines, %s, total lines, %s\n", add, subs, loc }' -; done >> 21_05_28_code.csv;


since定义其实时间,until定义结束时间。

原文链接:https://blog.csdn.net/m0_43383623/article/details/119342633
 

修改|提交操作

git commit --amend追加信息|修改

git commit --amend

 修改已提交的commit注释

修改之前的某次注释

  1. 输入:
    git rebase -i HEAD~2
    最后的数字2指的是显示到倒数第几次 比如这个输入的2就会显示倒数的两次注释(最上面两行)

  2. 你想修改哪条注释 就把哪条注释前面的pick换成edit。方法就是上面说的编辑方式:i---编辑,把pick换成edit---Esc---:wq.

  3. 然后:(接下来的步骤Terminal会提示)
    git commit --amend

  4. 修改注释,保存并退出后,输入:
    git rebase --continue

其实这个原理我的理解就是先版本回退到你想修改的某次版本,然后修改当前的commit注释,然后再回到本地最新的版本

修改之前的某几次注释

修改多次的注释其实步骤和上面的一样,不同点在于:

  1. 同上
  2. 你可以将多个想修改的commit注释前面的pick换成edit
  3. 依次修改你的注释(顺序是从旧到新),Terminal基本都会提示你接下来的操作,每修改一个注释都要重复上面的3和4步,直到修改完你所选择的所有注释

已经将代码push到远程仓库

首先,你把最新的版本从远程仓库先pull下来,修改的方法都如上,最后修改完成后,强制push到远程仓库:
git push --force origin master
注:很重要的一点是,你最好保证在你强制push之前没有人提交代码,如果在你push之前有人提交了新的代码到远程仓库,然后你又强制push,那么会被你的强制更新覆盖!!!



作者:筱湮
链接:https://www.jianshu.com/p/098d85a58bf1
 

暂存操作

 git stash  save将文件暂存在本地

git stash pop  还原最近一次的暂存内容

git stash list 查看暂存的版本号

git stash  pop    stash@{0}    还原指定的暂存内容

git stash drop   <stash@{id}>  删除指定的暂存内容

git stash clear   删除所有stash

处理文件中冲突的部分

其中Updated upstream 和=之间的内容就是pull下来的内容,和stashed changes之间的内容就是本地修改的内容。碰到这种情况,git也不知道哪行内容是需要的,所以要自行确定需要的内容。

撤销操作

最新版本的git已经使用git restore 代替了原来的reset和checkout命令

“git restore <文件>..." 丢弃工作区的改动

 "git restore --staged <文件>..." 以取消暂存

撤销工作区(修改)--还没add的用checkout

撤销尚未add/ commit提的修改(撤销工作区的修改)

git checkout -- .                     # 撤销对所有已修改但未提交的文件的修改,但不包括新增的文件

git checkout  -- [filename]   # 撤销对指定文件的修改,[filename]为文件名,注意中间有--

已 add / commit/push 的修改 参加git reset命令

本地撤销

撤销到只剩add(撤销push和commit)

git reset --soft HEAD~1 撤销回上一个版本

git reset --soft  commit_id:回退到某个版本,撤销到只剩add。如果还要提交,直接commit即可

撤销到只剩工作区(撤销push和commit和add)

git reset --mixed HEAD~1

撤销全部修改(撤销push和commit和add和工作区---危险)

(已经push,想完全回退,连工作区的修改都不要了)

git reset --hard HEAD~1:彻底回退到某个版本,撤销commit、add、和工作区修改,本地的源码也会变为上一个版本的内容(危险)

远程分支同步撤销

git push -f origin  远程分支

说明:上面的操作都只是reset本地的,此时如果再git pull,远程仓库的内容又会和本地之前版本的内容进行merge,如果想让远程分支也reset,则需要git push -f origin 远程分支 ?

 本地撤销:

reset命令有3种方式:

回退到上一个版本HEAD~1,回退到某个版本则填commit_id

git reset --soft HEAD~1:撤销add之后的操作,如果还要提交,直接commit即可

git reset --mixed HEAD~1:此为git reset不带任何参数的默认方式,只保留工作区不变,commit和add都撤销。

git reset --hard HEAD~1:仓库和本地的源码修改全部撤销,危险。

远程分支同步撤销:

git push -f origin  远程分支

说明:上面的操作都只是reset本地的,此时如果再git pull,远程仓库的内容又会和本地之前版本的内容进行merge,如果想让远程分支也reset,则需要git push -f origin 远程分支 ?

还有一种方法:直接在远程server的仓库目录下,执行git reset –soft 10efa来回退,然后本地拉下来。注意:在远程不能使用mixed或hard参数


 

如何恢复因为误操作git reset --hard 删掉当前代码_https://blog.csdn.net/hourgtester/article/details/104779158)链接:https://www.jianshu.com/p/e84283d2f0f1

#回退所有内容到上一个版本

git reset HEAD^

#回退a.py这个文件的版本到上一个版本

git reset HEAD^ a.py

#向前回退到第3个版本

git reset –soft HEAD~3

#将本地的状态回退到和远程的一样

git reset –hard origin/master

#回退到某个版本

git reset 057d

#回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit

git revert HEAD

分支管理


(1)创建分支

git branch <分支名>:创建新分支

(2)切换分支

git switch <分支名>

git checkout <分支名>

(3)创建并切换分支

git checkout -b <分支名>:创建并切换分支(旧版本)

git switch -c <分支名>:(推荐使用)

(5)查看分支

git branch:默认查看本地分支(当前所在分支前加*)

git branch -a:查看本地、远程分支(远程分支为红色)

(6)合并分支到当前分支

git merge <分支名>

删除分支


$git branch -d  分支名  //删除本地分支

$git push origin -d 分支名 //删除远程分支

从已有分支拉出新分支

从 master 分支,重新拉取出名为 dev的新分支

 git checkout master

git pull

git checkout -b dev   #从当前分支 copy 出新的开发分支

git push origin dev    #把新建的分支 push 到远端

git branch --set-upstream-to=origin/dev   #本地分支与远程分支关联

代码回滚

回到指定版本:

git reset   --hard   e499aac9257354c54ac2e1ff6a393ac7c8d2f342  (注意:会删除本地代码,注意备份)
强制提交:

git push -f origin master

报错处理:

[remote rejected] HEAD -> refs/for/dev (no new changes)
这里有个方法解决,
http://blog.csdn.net/cuiaamay/article/details/51965325

更简单的方法:git commit --amend,然后什么也不做,直接保存退出就好,可以重新生成sha1,然后就可以push了。
 

丢弃未跟踪的本地修改

# 删除 untracked files
git clean -f

# 连 untracked 的目录也一起删掉
git clean -fd

# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd

# 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd

取消文件跟踪

对所有文件都取消跟踪:

git rm -r --cached .    //不删除本地文件

git rm -r --f .               //删除本地文件

对某个文件取消跟踪

git rm --cached readme1.txt    删除readme1.txt的跟踪,并保留在本地。

git rm --f readme1.txt               删除readme1.txt的跟踪,并且删除本地文件。

然后git commit 即可。

但是git status查看状态时还是会列出来,每次使用git status 查看状态时总是会列出被跟踪的文件,可以通过 .gitignore文件来达到目的在git init 的目录下建立.gitignore文件,git官方提供的有 该文件,可以加以修改使用

拉取一个新分支

1.切换到要copy的分支(master),拉取最新代码(可以命令行,也可以直接idea切换后拉去个新分支)

git checkout master
git pull
1
2
2.拉取新分支,命名为 dev-8.0

git checkout -b dev-8.0
1
3.将新建的分支push到远端

git push origin dev-8.0
1
4.和远程关联

git branch --set-upstream-to=origin/dev-8.0
1
5.再次拉去验证是否成功

 git pull
1
6.如果想删掉此分支

 git branch -d dev-8.0  删除本地分支
 git push origin -d dev-8.0  删除远程分支
————————————————
原文链接:https://blog.csdn.net/Carrie_Q/article/details/122532894

 合并分支

方式1:

#把master的megre到feature

git  checkout  feature
git  merge      master

“应该需要加orign 为orign/master”

merge合并的优点:

  • 自动创建一个新的commit,记录了真实的commit情况,方便查看记录
  • 如果合并遇到冲突,仅需要修改后重新commit即可

merge的缺点:就是每次合并都会产生一个新的commit, 所以在使用一些git的 GUI工具,特别是commit比较频繁时,就会看到分支线很杂乱。这时如果有问题需要查找就会很困难。

方式2:

#把master的rebase到feature,就是把master的commit安插到feature线上

git  checkout  feature
git  rebase     master

git merge和rebase合并分支的区别:https://www.cnblogs.com/shenjp/p/14437454.html

如上图所示,rebase的特点:

  • 改变当前分支从master上拉出分支
  • 没有多余的合并历史记录,并且合并后的commit顺序不一定按照commit的提交时间排序
  • 可能会多次解决同一个地方的冲突
  • 提交记录更干净,master上每个commit点都是相对独立完整的功能点

假如我们在rebase的过程中遇到了冲突,我们在解决冲突之后,需要执行:

1. git add

2.  git rebase --continue 来继续变基的操作。

3. 如果执行第二步无效,那么可以执行 git rebase --skip

注意:不要执行完 git add 之后执行 git commit

 删除分支


$git branch -d  分支名  //删除本地分支

$git push origin -d 分支名 //删除远程分支

GIT说明手册

git merge (Branching and Merging) - Git 中文开发手册 - 开发者手册 - 云+社区 - 腾讯云

学习GIT的动态网

https://learngitbranching.js.org

GitHub - pcottle/learnGitBranching: An interactive git visualization and tutorial. Aspiring students of git can use this app to educate and challenge themselves towards mastery of git! 
Git知识总览(一) 从 git clone 和 git status 谈起Git知识总览(一) 从 git clone 和 git status 谈起 - 青玉伏案 - 博客园

从远程仓库获取最新代码合并到本地分支

//查询当前远程的版本
$ git remote -v
//直接拉取并合并最新代码
$ git pull origin master [示例1:拉取远端origin/master分支并合并到当前分支]
$ git pull origin dev [示例2:拉取远端origin/dev分支并合并到当前分支]

原文:https://blog.csdn.net/hanchao5272/article/details/79162130 
分析:不推荐这种方式,因为是直接合并,无法提前处理冲突。

2.git fetch + merge: 获取最新代码到本地,然后手动合并分支

//查询当前远程的版本
$ git remote -v
//获取最新代码到本地(本地当前分支为[branch],获取的远端的分支为[origin/branch])
$ git fetch origin master  [示例1:获取远端的origin/master分支]
$ git fetch origin dev [示例2:获取远端的origin/dev分支]
//查看版本差异
$ git log -p master..origin/master [示例1:查看本地master与远端origin/master的版本差异]
$ git log -p dev..origin/dev   [示例2:查看本地dev与远端origin/dev的版本差异]
//合并最新代码到本地分支
$ git merge origin/master  [示例1:合并远端分支origin/master到当前分支]
$ git merge origin/dev [示例2:合并远端分支origin/dev到当前分支]

git fetch origin master         //从远程主机的master分支拉取最新内容 
git merge FETCH_HEAD    //将拉取下来的最新内容合并到当前所在的分支中

git fetch 命令:

$ git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地

$ git fetch <远程主机名> <分支名> //如果只想取回特定分支的更新,可以指定分支名: 注意之间有空格 

最常见的命令如取回origin 主机的master 分支:

$ git fetch origin master
取回更新后,会返回一个FETCH_HEAD ,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:

$ git log -p FETCH_HEAD

原文:https://blog.csdn.net/hanchao5272/article/details/79162130 

恢复错误的操作

    先查找本地操作日志:

    git reflog show dev

上图可以看到我们有个错误的reset,下面的命令即可恢复到reset前的状态:

  git reset --hard dev@{4}

想回复到那个位置改写日志标识即可

 10.删除版本库中文件

git rm test.txt  //git rm 和git add 其实是等效的,都是对暂存区的操作
git commit -m "rm test.txt"

$ git branch -d dev //删除分支
Deleted branch dev (was 84a8f86).
74565@jason MINGW64 /c/notos/code/gitpractice (master)
$ git branch
* master

 16.解决冲突

假如在一个新的分支上修改了readme并进行提交,master上也对readme进行了修改,而且修改的是同一行,也commit了,那么合并新分支到master时会报错
$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.//自动合并失败,手动解决冲突后,重新提交

手动解决冲突航班重新提交
 git add readme.txt
 
74565@jason MINGW64 /c/notos/code/gitpractice (master|MERGING)
$ git commit -m "fixed conflict"
[master 4cdbdc4] fixed conflict

 20.git 查看远程仓库信息

$ git remote
origin
74565@jason MINGW64 /c/notos/code/gitpractice (dev)
$ git remote -v
origin  git@github.com:jasondong-1/gitpractice.git (fetch)
origin  git@github.com:jasondong-1/gitpractice.git (push)

 25.git打标签(人类可以识别的标志)

git tag v0.1 33dd7af //33dd7af是commit-id
或
$ git tag -a v0.2 -m "stable edition" e47dc70

查看 tag 
git tag

 26.操作标签

git push origin <tagname>可以推送一个本地标签;
git push origin --tags可以推送全部未推送过的本地标签;
git tag -d <tagname>可以删除一个本地标签;
git push origin :refs/tags/<tagname>可以删除一个远程标签。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值