IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> git常用的命令汇总 -> 正文阅读

[开发工具]git常用的命令汇总

git常用的命令汇总

声明

本文中的内容属于个人总结整理而来,个人水平有限,对于部分细节难免有理解错误及遗漏之处,如果您在阅读过程中有所发现,希望您能指正,同时文章中的部分内容也参考了其它大神的文章,如果文章中的内容侵犯了您的权益,表示非常歉意,请您指出,我将尽快修改。

简介

本文中对常用的git的命令的使用方法进行了一个汇总。

目前有一部分操作还尚未完善,后续将会持续更新

变更说明

  • [1.0.0] - 初次内容整理 - 2021-11-23

用户相关操作

一般操作都分为全局及局部操作,一般情况下命令中带有–global的表示针对全局的配置进行设置,如果只是想对局部生效去掉–global即可

  • 查看及修改局部用户名和邮箱地址

    #查看用户名
    $ git config user.name
    #查看邮箱
    $ git config user.email
    
    #修改用户名
    $ git config user.name "XXXXX"
    #修改邮箱
    $ git config user.email "XXX@XXX"
    
  • 查看全局用户名和邮箱地址

    #查看用户名
    $ git config --global user.name
    #查看邮箱
    $ git config --global user.email
    
    #修改用户名
    $ git config --global user.name "XXXXX"
    #修改邮箱
    $ git config --global user.email "XXX@XXX"
    
  • 设置大小写敏感

    #查看当前大小敏感的设置
    $ git config --global core.ignorecase
    
    #设置大小写敏感
    $ git config --global core.ignorecase false
    
  • 配置GitBash中显示中文

    如果本地文件或者文件夹为中文时,中文的字符不能正常显示。或者使用git log查看日志时,带有中文的日志无法正常显示的话,可以通过如下操作处理

    #首先修改core.quotepath
    $ git config --global core.quotepath false
    
    #如果git log不能正常显示的话,则试用
    $ git --no-pager log
    #使用上述的如果可以在git log中显示的话
    $ git config --global core.pager more
    
  • 修改默认的合并及比较工作为Beyond Compared

    详细参见官方文档:Using Beyond Compare with Version Control Systems

    #设置Diff使用BC4
    $ git config --global diff.tool bc
    $ git config --global difftool.bc.path "C:/Program Files/Beyond Compare 4/BComp.exe"
    
    #文件比较
    $ git difftool <filePath>
    
    #设置Merge使用BC4
    $ git config --global merge.tool bc
    $ git config --global mergetool.bc.path "C:/Program Files/Beyond Compare 4/BComp.exe"
    
    #Merge文件
    $ git mergetool <filePath>
    
    # 默认情况下Merge完毕后,会保留*.orig扩展名的文件,可以执行如下指定设置默认删除
    $ git config --global mergetool.keepbackup false
    

分支相关操作

  • 创建本地分支

    在本地创建名称为testing的分支,创建后并不会切换到对应的分支

    *符号指向的为当前所在的分支

    $ git branch testing
    
    $ git branch
    * master
      testing
    
  • 创建并切换本地分支

    分支创建完成后会自动切换到对应的分支上

    # 查看当前所在的分支
    $ git branch
      master
    * testing
    
    # 创建新的分支,并切换到对应的分支上
    $ git checkout -b testing123
    Switched to a new branch 'testing123'
    
    # 再次查看所在的分支,可以看到已经成功创建并切换到了新创建的分支上
    $ git branch
      master
      testing
    * testing123
    
  • 本地切换到指定的分支

    # 查看当前所在的分支
    $ git branch
    * master
      testing
    
    # 切换到指定的分支上
    $ git checkout testing
    Switched to branch 'testing'
    
    # 再次查看所在的分支,已经成功切换到指定的分支
    $ git branch
      master
    * testing
    
  • 切换到远程指定的分支

    #查看所有的分支
    $ git branch -a
    * master
      remotes/origin/DotEntity
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
    
    #切换到远程的DotEntity分支,并为本地分支命名DotEntity
    $ git checkout -b DotEntity origin/DotEntity
    Switched to a new branch 'DotEntity'
    Branch 'DotEntity' set up to track remote branch 'DotEntity' from 'origin'.
    
    #再次查看分支情况,已经成功检出并切换到了远程指定的分支
    $ git branch -a
    * DotEntity
      master
      remotes/origin/DotEntity
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
    
  • 查看本地分支

    *符号指向的为当前所在的分支

    $ git branch
      master
    * testing
    
  • 查看本地与远程仓库的所有分支

    *符号指向的为当前所在的分支,以remotes/开头的分支为远程仓库的分支

    # 可以使用-a或者--all
    $ git branch -a
      master
    * testing
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
    
  • 查看远程仓库分支

    # 可以使用-r或者remotes
    $ git branch -r
      origin/HEAD -> origin/master
      origin/master
    
    • 将本地分支与远程仓库分支关联

      某些时候使用git pull时会出现如下情况:

      There is no tracking information for the current branch.
      Please specify which branch you want to merge with.
      See git-pull(1) for details.
      
      git pull <remote> <branch>
      
      If you wish to set tracking information for this branch you can do so with:
      
      git branch --set-upstream-to=origin/<branch> release
      

      其原因是:git在本地创建一个分支后,需要与远程分支关联,如果没有关联,git执行操作时会提示添加关联,关联的目的是为了在执行git pull,git push操作时不再需要指定对应的远程分支

      解决办法:

      #将本地的分支与远程仓库的分支关联,remote-branch对应的远程仓库的分支,local-branch对应的当前的本地分支
      $ git branch --set-upstream-to=origin/<remote-branch> local-branch
      
      $ git branch --set-upstream-to=origin/DotEntity DotEntity
      Branch 'DotEntity' set up to track remote branch 'DotEntity' from 'origin'.
      
  • 将本地创建的分支推送到远程仓库上

    # 新创建本地分支
    $ git branch testing
    
    # 查看新创建的本地分支,可以看到本地分支(testing)已经创建,远程仓库没有对应的分支
    $ git branch -a
    * master
      testing
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
    
    # 将本地创建的分支推送到远程仓库上
    $ git push origin testing
    Total 0 (delta 0), reused 0 (delta 0)
    remote:
    remote: Create a pull request for 'testing' on GitHub by visiting:
    remote:      https://github.com/XXXX/GitLeanProj/pull/new/testing
    remote:
    To https://github.com/XXXX/GitLeanProj.git
    * [new branch]      testing -> testing
    
    # 再次查看远程仓库分支情况,可以看到对应的分支(testing)已经推送到远程仓库
    $ git branch -a
    * master
      testing
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
      remotes/origin/testing
    
  • 删除本地分支

    如果当前在将要删除的分支上,最好在删除前切换到其它的分支上

    # 执行删除指定的分支,可以使用-d或者--delete
    $ git branch -d testing123
    Deleted branch testing123 (was aa9ae1c).
    
  • 删除远程仓库分支

    # 查看本地及远程仓库的分支
    $ git branch -a
      master
    * testing
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
      remotes/origin/testing
    
    # 从远程仓库中删除分支(testing)
    $ git push --delete origin testing
    To https://github.com/XXX/GitLeanProj.git
    - [deleted]         testing
    
    # 再次查看本地及远程的分支可以看到远程仓库的分支(testing)被删除了
    $ git branch -a
      master
    * testing
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
    
  • 本地与远程仓库进行同步

    $ git fetch
    remote: Counting objects: 8, done.
    remote: Compressing objects: 100% (8/8), done.
    remote: Total 8 (delta 4), reused 0 (delta 0)
    Unpacking objects: 100% (8/8), done.
    From ssh://XXX/ZZZ/XXX
      e9419c21..c7eaeede  develop    -> origin/develop
    
  • 本地向远程仓库进行拉取

    $ git pull
    Updating 1c3ec93e..9ff1beaa
    Fast-forward
    .../FlatBuffer/AddBindLinkTargetEffectData.cs      |  26 ++++++++++--------
    11 files changed, 84 insertions(+), 77 deletions(-)
    delete mode 100644 XXX/XX/XX/TargetSecondType.cs
    Current branch feature/PROJECTEM-5916--技能升级 is up to date.
    
  • 合并指定的分支

    # 将指定的分支的内容合并到当前的分支上(合并时必须先切换到对应的分支)
    $ git merge 5916-opt-linkeffect
    Updating 25f4ab3e..f46df244
    Fast-forward
    .../Timeline/Actions/Effects/EffectActionUtil.cs   | 126 ++++++++++++---------
    1 file changed, 73 insertions(+), 53 deletions(-)
    
  • 查看所有分支最后一次提交

    # 可以使用-v、-vv或者-verbose来查看所有分支最后一次提交
    $ git branch -v
    * master   09a37b1 Initial commit
      testing1 24065ff add new file
      testing2 904c97d delete file
    
  • 简单比较两个分支提交差异情况

    #查看branch1中有,而branch2中没有的内容
    $ git log branch1 ^branch2
    
    #查看branch1中比branch2中多提交了哪些内容
    $ git log branch1..branch2
    
    #查看branch1与branch2的不同
    $ git log branch1...branch2
    
    #查看branch1与branch2的不同,并显示出每个提交是在哪个分支上
    $ git log --left-right branch1...branch2
    
    $ git log --left-right DotEntity...master
    commit < 01fa8f5fba8b7705c2c60f5ec385b87a4355f66e (HEAD -> DotEntity, origin/DotEntity)
    Author: yubin.li <liyubin.724@163.com>
    Date:   Tue May 26 19:27:28 2020 +0800
    
        new:准备处理Avatar相关的逻辑
    #根据commit后面的<或者>,如果为<表示提交在比较的左侧(示例中即显示在DotEntity上),反之>表示提交在右侧
    
  • 比较任意两分支差异(git diff)

#以文件的形式对分支branch1与branch2进行对比,显示差异的部分(加上 --stat 是显示文件列表, 否则是文件内容比较)
$ git diff DotEntity master --stat
 Dot/DotEditor/DotEditor.csproj                     |   6 -
 Dot/DotEditor/Entity/Node/NodeBehaviourEditor.cs   | 177 +--------------
 Dot/DotEngine/DotEngine.csproj                     |  10 -
 Dot/DotEngine/Entity/Avatar/AvatarUtil.cs          |   2 +-
 DotProject/Assets/DotEngine/DotEngine.dll          | Bin 171008 -> 163840 bytes
 ...
 21 files changed, 7 insertions(+), 854 deletions(-)

#比较具体的文件的差异
$ git diff branch1 branch2 <filePath>

#显示差异文件的详细内容
$ git diff branch1 branch2
  • 查看已经合并的分支

  • 查看尚未合并的分支

提交相关的操作

  • 添加操作

    #添加单个文件或者目录
    $git add <path>
    
    #添加所有指定类型的文件
    $git add *.cs
    
    #提交所有的变化
    $git add -A/--all
    
    #提交被修改(modified)和被删除的(deleted),不包括新的文件(new)
    $git add -u/-update
    
    #提交新文件(new)和被修改的(modified)文件,不包括被删除的文件
    $git add .
    
  • 提交修改到仓库中

    # 通过-m或者--message设定提交信息
    $ git commit -m "日志"
    
  • 修改提交到仓库时日志编辑工具

    #设置默认使用vim作为日志编辑的工具
    $ git config --global core.editor "vim"
    
    #设置完成后,再提交git commit时会使用vim来编写提交信息
    

合并相关的操作

  • 合并指定的分支
# 将指定的分支合并到当前所在的分支上
$ git merge NativeDrawer-AddFieldButton
Updating d1fdec2..de795b3
Fast-forward
 Dot/DotEditor/DotEditor.csproj                     |   1 +
 .../NativeDrawer/Decorator/BoxedHeaderDrawer.cs    |   2 +-
 .../NativeDrawer/Decorator/ButtonDrawer.cs         |  48 +++++++++++++++++++++
 .../NativeDrawer/Decorator/DecoratorDrawer.cs      |   4 +-
 19 files changed, 99 insertions(+), 17 deletions(-)
 create mode 100644 Dot/DotEditor/NativeDrawer/Decorator/ButtonDrawer.cs
 create mode 100644 Dot/DotEngine/NativeDrawer/Decorator/ButtonAttribute.cs
  • 取消合并

    # 若合并后出现冲突或者异常的情况,可以取消此次合并操作
    $ git merge --abort
    
  • 冲突后启动合并工具

    #启动合并工具
    $ git mergetool
    
    This message is displayed because 'merge.tool' is not configured.
    See 'git mergetool --tool-help' or 'git help config' for more details.
    'git mergetool' will now attempt to use one of the following tools:
    opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc codecompare emerge vimdiff
    Merging:
    DotProject/Assets/DotEngine/DotEngine.dll
    DotProject/Assets/DotEngine/DotEngine.dll.mdb
    DotProject/Assets/DotEngine/DotEngine.pdb
    DotProject/Assets/DotEngine/Editor/DotEditor.dll
    DotProject/Assets/DotEngine/Editor/DotEditor.dll.mdb
    DotProject/Assets/DotEngine/Editor/DotEditor.pdb
    
    Normal merge conflict for 'DotProject/Assets/DotEngine/DotEngine.dll':
      {local}: modified file
      {remote}: modified file
    Hit return to start merge resolution tool (vimdiff):
    
  • 解决二进制类型的文件冲突

    二进制类型的文件一旦冲突后是无法合并的

    #由于二进制文件无法编辑,只能选取其中的某一个版本
    #--ours 表示检出当前分支,即合并后保存当前分支的改动而丢弃另外一个分支的改动。
    #--theirs 表示检出另外一个分支,即保存另外一个分支的改动丢弃当前分支的改动。
    #FILE 需要解决的文件
    $ git checkout FILE --ours{--theirs}
    
    #冲突解决后需要再次add后才能提交
    

变基(rebase)相关操作

清理相关的操作

#查看将会被清理的内容,添加-n只是做一次演习,并不会真的执行清理.-n可以与其它的同时使用
  $ git clean -n

#删除指定目录下所有没有被跟踪过的文件,如果不指定<path>,则会对整个库进行清理
#不会删除.gitignore文件中指定的文件或者文件夹
$ git clean -f <path>

#同时删除未被跟踪的文件及文件夹
$ git clean -df

#删除指定目录下所有没有被跟踪的文件,不管.gitignore文件中是否指定的文件或者文件夹
$ git clean -xf

#结合git reset --hard与git clean -f可以使用工作目录回退到最后一次提交时候的状态
$ git reset --hard
$ git clean -df

撤销本地修改

对于新增加文件来说,由于新文件并未添加到git的记录中,属于未被tracked的状态,撤销修改时不会对其有任何影响,如果确认不需要的话,直接删除即可

#放弃本地所有的尚未提交的修改,将修改的文件还原到未修改前的状态,不包括新增的文件
  $ git checkout .

#撤销对指定文件的修改
  $ git checkout [filename]

重置相关操作(git reset)

  • 回退到任意已经提交过的版本
#通过指定[hashcode]可以回退到任意提交过的版本,如果不指定[hashcode]则会回退到最后一次提交
#可以通过git log 来查看commit的哈希值
$ git reset --hard [hashcode]

贮存相关的操作

贮藏(stash)会处理工作目录的脏的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一个栈上, 而你可以在任何时候重新应用这些改动(甚至在不同的分支上)。

可以参见更详细的:贮藏与清理

#执行贮存同时添加备注信息,message中用于添加备注,方便查找
#也可以直接使用git stash
#目前git已经弃用了save,替换为push
$ git stash [push] <message>
Saved working directory and index state On DotEntity: 贮存目前修改优先解决NativeDrawer的BUG

#查看贮存区列表
$ git stash list
stash@{0}: On DotEntity: 贮存目前修改优先解决NativeDrawer的BUG

#显示做了哪些改动,默认show第一个存储
#如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
$ git stash show
Dot/DotEditor/NativeDrawer/NativeDrawerObject.cs   |   8 ++++++++
DotProject/Assets/DotEngine/DotEngine.dll          | Bin 171008 -> 171008 bytes
...
7 files changed, 8 insertions(+)

#显示第一个存储的详细的改动
#如果想显示其他存存储,命令:git stash show  stash@{$num}  -p ,比如第二个:git stash show  stash@{1}  -p
$ git stash show -p
diff --git a/Dot/DotEditor/NativeDrawer/NativeDrawerObject.cs b/Dot/DotEditor/NativeDrawer/NativeDrawerObject.cs
index 0d2937c..b309db3 100644
--- a/Dot/DotEditor/NativeDrawer/NativeDrawerObject.cs
+++ b/Dot/DotEditor/NativeDrawer/NativeDrawerObject.cs
@@ -59,6 +59,14 @@ public void OnGUILayout()
                EditorGUILayout.EndScrollView();
  ...
}
diff --git a/DotProject/Assets/DotEngine/DotEngine.dll b/DotProject/Assets/DotEngine/DotEngine.dll
index 5ace8d9..dc92d15 100644
...

#应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
$ git stash apply

#命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
$ git stash pop

#丢弃stash@{$num}存储,从列表中删除这个存储
$ git stash drop stash@{$num} 

#删除所有缓存的stash
$ git stash clear

重命名文件或文件夹

  • 基本的重命名(移动)操作

    $ git mv <old name> <new name>
    
  • 存储库中已有指定文件夹需要覆盖

    $ git mv -f <old name> <new name>
    
  • 区分大小写的重命名

    由于默认的情况下Git不区分大小写,如果需要进行重命名时,需要先将文件或者文件夹命名为其它的名称,再次重命名到指定的名称

    $ git mv casesensitive tmp
    $ git mv tmp CaseSensitive
    

关于Git大小写的问题有:

  1. stackoverflow大小写问题描述

fork相关的操作

参考资料

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 08:09:39  更:2021-11-24 08:11:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:43:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码