目录
■★★★===git Hub 时的命令行操作 (登录git【命令行】)
■命令行查看,创建,切换,删除Branch ★★★【超级常用】★★★
・merge 时 【スカッシュ(squash)】选项---简介
・merge 时 【スカッシュ(squash)】选项---具体操作
・merge 时 【フォワード オプション】选项---三种设置
①【O】・--ff(默认)// Fast-forward // git merge
②【M】--no-ff // non-Fast-forward // git merge
③【N】--ff-only Fast-forward 模式:
====
■基础
■前言1
Git是一个分布式的版本控制系统,它最早是在Linux上开发的,被用来管理Linux核心的源代码,
与集中式的版本控制系统(CVS,SVN)不同的是,
每一个使用者,都可以通过克隆的方式,在本地建立版本仓库。(克隆共有仓库到本地)
再对本地库进行操作(commit)时,不需要网络连接。
通过PUSH方式,反映到共有仓库中。
■前言2
之前一直使用Eclipse操作git,今天有一个需求,要修改已经PUSH的分支(Branch)的名字。
为了方便,于是命令行操作。
■基本命令
git add # 将工作区的修改提交到暂存区
git commit # 将暂存区的修改提交到当前分支
git reset # 回退到某一个版本
git pull # 从远程更新代码
git push # 将本地代码更新到远程分支上
git reflog # 查看历史命令
git status # 查看当前仓库的状态
git log # 查看提交历史
git revert # 回退某个修改
■以上命令的具体使用
(如果命令行不识别,自己在窗口把git的bin等(运行的时候说一个dll找不到,所在目录也加到Path中了)加到环境变量的Pash里面,然后到git仓库的目录下面,执行下面命令。)
git branch // 查看本地分支 (OK)
git branch -r // 查看远程分支 (OK)
git reflog show --
date=iso branch_name // 查看分支创建时间(可以查看远程分支的创建时间)
(OK)
git checkout master // 本地进入master分支
git checkout -b frommaster // 以master为源创建分支frommaster
git checkout develop // 本地进入develop分支
git checkout -b fromdevelop // 以develop为源创建本地分支fromdevelop
git push origin fromdevelop // 将本地fromdevelop分支作为远程fromdevelop分支
git commit –m “提交代码时的注释”
git checkout master // 合并分支 to Master step1
git merge newBranchName // 合并分支 to Master step2
git reset --hard <commit-id> // 撤消上一次commit的内容
■修改Branch名字(操作失败!)
git checkout oldBranchName // 本地进入oldBranchName 分支
git bran
重命名本地分支 (OK)
git push origin :oldBranchName //删除远程分支(NG)
(git push --delete origin oldBranchName // 删除远程分支 方法2) (NG)
git push origin newBranchName //PUSH本地分支 (NG,命令行看,是成功了,远程仓库中能看到(git branch -r),但是实际是失败了!别人PULL不下来。看了远程仓库git下面的文件,有文件被改动,但是各个分支的目录下面,没有本次新建的分支)
(git push origin newBranchName :newBranchName // PUSH本地分支 方法2)
git branch -vv // 查看本地分支和远程分支的跟踪关系
git branch --set-upstream-to=origin/remote_branch your_branch //新建分支后,与线上分支进行跟踪关联
■注意事项
备份git仓库的时候,
不要复制备份,会造成有的文件夹的日期改变。
直接把操作之前的git仓库压缩成zip文件,进行备份。
■扩展 (重要)
■★★★===git Hub 时的命令行操作 (登录git【命令行】)
可以尝试在 【Git Bash】的命名行下面执行
以下命令都好用
pwd
cd
ls
// 打开之后的默认目录是 /c/Users/yourUserName
// 跳转到对应的 工程目录 (有「.git]文件夹)
git branch
git branch -r
// 获取最新代码
git pull
//执行此命令后,会提示你输入用户名和密码
UserName for 'http://XXXXXXXX':
Password for 'http://XXXXXXXX':
// 如果已经是最新代码,则会显示下面的信息
Already up-to-date.
===
・★★===他命令 // Git
git reset --soft回退版本
git commit // 提交到本地仓库
git push // 提交到远程仓库
git branch // 查看分支
git log // 查看提交记录
git log -2 查看最近2次的提交历史记录
git status // 查看当前在
git checkout branch_name // 切换到你要合并的分支,并拉取最新的代码
git checkout -b feature556 // 从master创建新的分支 // 参数b 创建新的分支
更多回退命令:
git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard commit_id 退到/进到,指定commit的哈希码(这次提交之前或之后的提交都会回滚)
・★★===查看多个版本之间修改的代码
git pull 显示密码错误(去控制面板的凭据管理器中找到windows凭据,将git的密码更新一下)
①git config --list // 确认设置是否正确
②去控制面板的凭据管理器中找到windows凭据,将git的密码更新一下
git diff --name-only commitID_001 commitID_002
===
■命令行查看,创建,切换,删除Branch ★★★【超级常用】★★★
基于Master创建Branch
$ git checkout -b test007
Switched to a new branch 'test007'========================
根据远程分支,创建本地分支
git checkout -b test007 origin/test007
========================
查看当前分支 * 代表当前所在的分支
git branch
master
* test007========================
查看远程分支
git branch -r
========================
切换当前使用的分支
git checkout master
Switched to branch 'master'
M package-lock.json
M package.json
Your branch is up to date with 'origin/master'.========================
删除本地分支
git branch -d test007
Deleted branch test007(was FFA23).========================
获取最新代码(从远程更新代码)
注意!!!
使用之前,如果修改过Git密码,要从【凭据管理】中,删除上次保存的密码今天使用时,没有删除,执行pull命令,直接把自己的Github账号锁住了
git pull
========================
登录
git pull // 输入这个命令后(其他命令应该也行),会让你输入用户名,密码
========================切换到你的分支,并确认
git checkout branch_name // 切换到你要合并的分支,并拉取最新的代码
git status // 查看当前在
========================
查看提交记录
git log -2 查看最近2次的提交历史记录
========================
回退命令(两种方式):========================
===========【方式1】(速度快!):
本地commit,还没有push时,可以使用下面命令取消
===========
git reset HEAD^
git reset HEAD~1
git reset HEAD~2---------------------------------
HEAD^ 回退到commit之前
git reset HEAD~1 回退到,前一次的commit // 多次提交时,并且不想完全取消时使用
git reset HEAD~2 回退到,前二次的commit // 多次提交时,并且不想完全取消时使用本地修改会被保留,只是commit被取消
===========【方式2】(速度慢[一个一个文件置换(回退)}):
========================git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard commitID 退到/进到,指定commit的哈希码(这次提交之前或之后的提交都会回滚)注意!!!
这种方式的回滚,那个版本之后,所有提交过的代码的履历,都会丢失!!!都会丢失!!! 都会丢失!!! 都会丢失!!!
使用之前一定要三思而后行!
========================
回退之后的push:之后执行[git push]时,
会出现:git push 出现non-fast-forward的错误
出现non-fast-forward的错误,证明您的本地库跟远程库的提交记录不一致
因为我们回退了,所以,肯定是不一致的!
所以我们要这么[git push -f]来强制push操作之后,使用 git log -2 命令查看,可以看到,已经切到对应的版本了
在gitHub上,也可以看到效果
========================git push -f 之后,其它人的操作:
目前想到的办法是,删掉git工程,重新从Git上下载
(如果不重新下载,会有箭头显示)
========================
・★===去掉以及保存的密码
---
---
・Git 工作的 三个区域
1.Working
Working Tree 当前的工作区域
2.Stage
(先把代码添加到这里,然后提交)
Index/Stage 暂存区域,和git stash命令暂存的地方不一样。
使用git add xx,就可以将xx添加近Stage里面
3.Repository
Repository 提交的历史,即使用git commit提交后的结果
---
・Git Reset 三种模式
①git reset --soft
②git reset --mixed
③git reset --hard
git reset --hard
git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard commit_id 退到/进到,指定commit的哈希码(这次提交之前或之后的提交都会回滚)
---
git reset 的三种模式的使用场景_雕牌咸鱼的博客-优快云博客_git reset 三种模式
---
今天使用使用git merge 代码,报错了,merge失败,
使用git的Reset功能恢复(选择第一个)没有成功。 (工程文件夹右侧,显示 【マージ済み (merge完了)】branchm名)
选择第三个成功。
---
・Git Reset Eclipse 中的操作
有的时候,需要选择Head,才能达到我们想要恢复的效果。(黄色标记部分)
■Git Merge
・merge 时 【スカッシュ(squash)】选项---简介
(多个commit记录合并成一个提交记录)
// 目前的工作中,因为要保留所有履历,一般不会采用此选项
git merge コマンドを実行するときに、
--squash オプションを指定すると、
ブランチ先でのすべてのコミットを1つにまとめて、
現在チェックアウトしているブランチにステージングすることができます。
ブランチでの変更をマージする(直接マージ、スカッシュマージ、チェリーピック) | まくまくGitノート
squash 英 [skwɒʃ] 美 [skwɔʃ] スカッシュ
n. 壁球;果汁饮料;南瓜属植物;拥挤
v. 把…压扁;受挤压;挤入;镇压;使沉默
・merge 时 【スカッシュ(squash)】选项---具体操作
1. git checkout master
切换至 master分支
2. git merge origin/develop --squash
3. git commit -m "问题修改--测试ok" // 履历中,只保留这一条履历
・merge 时 【フォワード オプション】选项---三种设置
git merge オプションの --ff, --no-ff, --ff-only の違い - yu8mada
--ff(默认), --no-ff, --ff-only
git merge --ff/--no-ff/--ff-only 三种选项参数的区别 - 小二十七 - 博客园
①【O】・--ff(默认)// Fast-forward // git merge
Fast-forward 是指 Master 合并 Feature 时候发现 Master 当前节点一直和 Feature 的根节点相同,
没有发生改变,那么 Master 快速移动头指针到 Feature 的位置,
所以 Fast-forward 并不会发生真正的合并,【只(only)】通过移动指针(pointer)造成合并的假象,
这也体现 git 设计的巧妙之处。
(如果不匹配则执行 --no-ff(non-Fast-forward) 合并模式)
----
通俗解释 8.Git merge之 Fast Forward和 No Fast Forward(--no-ff方式)解析_扛麻袋的少年的博客-优快云博客
Fast Forward意为"快进模式"。主要使用在多分支合并的情况下。即:当前分支合并另一个分支的时候,如果合并的过程中没有Conflict冲突的时候,则会通过直接移动两个分支的指针,来达到合并的过程,这个过程就叫做Fast Forward。
----
②【M】--no-ff // non-Fast-forward // git merge
当合并的分支跟 master 不存在共同祖先节点的时候,这时候在 merge 的时候 git 默认无法使用 Fast-forward 模式,
git自己【Merge代码】
③【N】--ff-only Fast-forward 模式:
只会按照 Fast-forward 模式进行合并,如果【不符合】条件(并非当前分支的直接后代),则会拒绝合并请求并且推出
①②③三种模式 英文
https://blog.youkuaiyun.com/xiaozaq/article/details/82862916
・Git Merage 注意点
当出现rejected – non-fast-forward时,
不要选最下面的Force overwirte branch in remote if exists and have deverged,否则本地仓库会覆盖远程仓库,造成覆盖别人代码的严重后果
・rejected 英 [rɪˈdʒɛkt; ˈriːdʒɛkt] // adj. 被拒的;不合格的 // git merge
・Git Merge Eclipse中的操做
Eclipse中的Git使用之Branch创建,Merge_sun0322-优快云博客
一般按照如下方式选择(黄色标记部分)
・Git Merge操作 (英文解释 含 图片说明)
git merge和git merge --no-ff的区别_如果我年少有为不自卑-优快云博客
--ff
When the merge resolves as a fast-forward, only update the branch pointer, without creating a merge commit. This is the default behavior.
--no-ff
Create a merge commit even when the merge resolves as a fast-forward. This is the default behaviour when merging an annotated (and possibly signed) tag.
--squash
--no-squash
Produce the working tree and index state as if a real merge happened (except for the merge information), but do not actually make a commit, move the HEAD, or record $GIT_DIR/MERGE_HEAD (to cause the next git commit command to create a merge commit). This allows you to create a single commit on top of the current branch whose effect is the same as merging another branch (or more in case of an octopus).
With --no-squash perform the merge and commit the result. This option can be used to override --squash.
---
■git stash
git add .
git stash
stash 英[stæʃ] 藏匿; 隐藏; 存放; 贮藏; // git
在开发过程中我们需要经常切换分支,例如正在某一个分支下做需求时候,在该需求还未完成时就需要在另外一个分支下进行问题的修改,如果直接checkout切换分支会有冲突,会导致切换不成功,但是又不想将当前的做的修改复原,于是想到将当前的改动暂时保存下来,然后切换到另外一个分支去修改问题,当问题修改完成了之后将分支切换回来,然后再将之前保存的改动释放即可继续对需求进行开发了。
git 中stash的实用方法_git stash_码龙-的博客-优快云博客
----
■diff 两个Branch
注释版
@echo off
rem set path=C:sxz\Program Files\TortoiseGit\bin;%path%
set projectDir="C:\dev\MyJava001\"
set /P "outPutFileName=Your out put file name: "
set outputFile=%cd%\%outPutFileName:/=_%.txt
rem rojectDir disk
c:
cd %projectDir%
rem dir /b
echo %outputFile%
rem origin bigin is ok too.
rem git diff --output %outputFile% --name-status master test/test_202406_10
git diff --output %outputFile% --name-status origin/master origin/test/test_202406_10
pause;
简洁版
@echo off
set projectDir="C:\dev\MyJava001\"
set /P "outPutFileName=Your out put file name: "
set outputFile=%cd%\%outPutFileName:/=_%.txt
rem rojectDir disk
c:
cd %projectDir%
git diff --output %outputFile% --name-status origin/master origin/test/test_202406_10
pause;
===
■统计代码修改量
===
git命令行,统计代码修改量
・简略信息
git diff --shortstat commit_ID_0001 commit_ID_0002
git diff --shortstat branch_2024_12 branch_2025_03
・详细信息(包括每一个文件的信息)
git diff --stat commit_ID_0001 commit_ID_0002
git diff --stat branch_2024_12 branch_2025_03
・其它参数
--output
git diff --output C:\gitDiffCount\2025_0311.txt --shortstat commit_ID_0001 commit_ID_0002
・排除不统计的目录
git diff --shortstat branch_2024_12 branch_2025_03 -- . ':!excluded_dir1' ':!excluded_dir2'
==
// 排除目录(验证过的命令)
---简洁(总计)
git diff --shortstat origin/master origin/feature/2025_0317_10 -- :!jenkins/* :!scr/test/* :!src/docs/*
--所有代码(明细)
git diff --stat origin/master origin/feature/2025_0317_10 -- :!jenkins/* :!scr/test/* :!src/docs/*
---
退出git命令行
问:使用上面git命令后,如何退出?
答:使用【q】键即可退出
=====