【Git】基本配置与常用命令演示

 

一、配置Git

Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。

这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方(Linux系统):

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Users\$USER。

用户信息

当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息

配置个人的用户名称和电子邮件地址:

$ git config --global user.name "Smile"
$ git config --global user.email imyjs@imyjs.cn

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

文本编辑器

设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::

$ git config --global core.editor emacs

差异分析工具

还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:

$ git config --global merge.tool vimdiff

Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。

当然,你也可以指定使用自己开发的工具,具体怎么做可以参阅第七章。

查看配置信息

要检查已有的配置信息,可以使用 git config --list 命令:

$ git config --list
init.defaultbranch=master
user.name=Smile
user.email=imyjs@imyjs.com

有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。

这些配置我们也可以在 ~/.gitconfig/etc/gitconfig 看到,如下所示:

vim ~/.gitconfig 

显示内容如下所示:

[user]
    name = Smile
    email = imyjs@imyjs.com

也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:

$ git config user.name
Smile

为常用指令配置别名(可选)

有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。

  1. 打开用户目录,创建 .bashrc 文件部分windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行 touch ~/.bashrc
  2. 在 .bashrc 文件中输入如下内容:
    #用于输出git提交日志 
    alias git-log='git log --pretty=oneline --all --graph --abbrev-commit' 
    #用于输出当前目录所有文件及基本信息 
    alias ll='ls -al'
    
  3. 打开gitBash,执行 source ~/.bashrc

解决GitBash乱码问题

  1. 打开GitBash执行下面命令
    git config --global core.quotepath false
    
  2. ${git_home}/etc/bash.bashrc 文件最后加入下面两行
    export LANG="zh_CN.UTF-8" 
    export LC_ALL="zh_CN.UTF-8"
    

二、使用Git

0.基本概念

我们先来理解下 Git 工作区暂存区版本库概念:

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库,也就是通常所说的本地库。

下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:

  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 master 分支所代表的目录树。
  • 图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。
  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
  • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
  • 当执行 git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
  • 当执行 git checkout . 或者 git checkout -- 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
  • 当执行 git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

1.工具类命令

git status

git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。也可以说是当前库的一个状态。

$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)

通常我们使用 -s 参数来获得简短的输出结果.

$ git status -s
 M music.txt

 

git diff

git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。

git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。

git diff 有两个主要的应用场景。

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat

显示暂存区和工作区的差异:

$ git diff [file]
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index abd81a7..6a93a6e 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,3 @@
 hello git!!
+
+test diff
\ No newline at end of file

显示暂存区和上一次提交(commit)的差异:

$ git diff --cached [file]
或
$ git diff --staged [file]

$ git add readme.txt # 首先将本次修改添加到暂存区

$ git diff --cached readme.txt
diff --git a/readme.txt b/readme.txt
index abd81a7..6a93a6e 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,3 @@
 hello git!!
+
+test diff
\ No newline at end of file

显示两次提交之间的差异:

$ git diff [first-branch]...[second-branch]

$ git commit -m "second commit" # 首先将本次修改提交到仓库
[master afe9673] second commit
 1 file changed, 2 insertions(+)

$ git log # 查看两次提交的索引号

$ git diff afe967 70a5e
diff --git a/readme.txt b/readme.txt
index 6a93a6e..abd81a7 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1 @@
 hello git!!
-
-test diff
\ No newline at end of file

 

git --help

$ git --help
usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           [--super-prefix=<path>] [--config-env=<name>=<envvar>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone     Clone a repository into a new directory
   init      Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add       Add file contents to the index
   mv        Move or rename a file, a directory, or a symlink
   restore   Restore working tree files
   rm        Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect    Use binary search to find the commit that introduced a bug
   diff      Show changes between commits, commit and working tree, etc
   grep      Print lines matching a pattern
   log       Show commit logs
   show      Show various types of objects
   status    Show the working tree status

grow, mark and tweak your common history
   branch    List, create, or delete branches
   commit    Record changes to the repository
   merge     Join two or more development histories together
   rebase    Reapply commits on top of another base tip
   reset     Reset current HEAD to the specified state
   switch    Switch branches
   tag       Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch     Download objects and refs from another repository
   pull      Fetch from and integrate with another repository or a local branch
   push      Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
See 'git help git' for an overview of the system.

 

git --version

$ git --version
git version 2.37.0.windows.1

$ git -v
git version 2.37.0.windows.1

 

2.创建版本库

什么是版本库?版本库又名仓库,英文名repository,可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。

git init

通过命令 git init 把这个目录变成git可以管理的仓库,如下:

$ git init
Initialized empty Git repository in D:/gitDemo/.git/

 

这时候你当前gitDemo目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。不过,不建议你使用自己正在开发的公司项目来学习Git,否则造成的一切后果概不负责。

Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。

在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。

git clone

我们使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。

克隆仓库的命令格式为:

git clone <repo>

如果我们需要克隆到指定的目录,可以使用以下命令格式:

git clone <repo> <directory>

参数说明:

  • repo:Git 仓库。
  • directory:本地目录。

比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:

$ git clone git://github.com/schacon/grit.git

执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。

如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:

$ git clone git://github.com/schacon/grit.git mygrit

 

3.添加文件到仓库

首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。

言归正传,现在我们编写一个readme.txt文件,并使用vim编辑器添加hello git!文字。

Smile@DESKTOP-VBAP39H MINGW64 /d/gitDemo (master)
$ touch readme.txt

Smile@DESKTOP-VBAP39H MINGW64 /d/gitDemo (master)
$ vim readme.txt

 

git add

首先查看当前的一个状态:

$ git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        readme.txt
nothing added to commit but untracked files present (use "git add" to track)

# 显示Untracked files:有未追踪的文件
# 并提示使用"git add <file>..."命令去追踪进而添加到仓库

 

第一步,用命令git add告诉Git,把文件添加到暂存区:

$ git add readme.txt
warning: in the working copy of 'readme.txt', LF will be replaced by CRLF the next time Git touches it

此时,再去看看状态:

$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   readme.txt
        
# 显示new file: 有新的文件
# 并提示使用"git rm --cached <file>..."命令去删除文件的追踪进而不提交到仓库

 

git commit

第二步,用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "first commit"
[master (root-commit) 70a5e3e] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt

 

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);1 insertions:插入了两行内容(readme.txt有两行内容)。

在 Linux 系统中,commit 信息使用单引号 ',Windows 系统,commit 信息使用双引号 "

所以在 git bash 中 git commit -m '提交说明' 这样是可以的,在 Windows 命令行中就要使用双引号 git commit -m "提交说明"

 

4.查看提交历史

Git 提交历史一般常用两个命令:

  • git log - 查看历史提交记录。
  • git blame - 以列表形式查看指定文件的历史修改记录。

git log

在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看。

使用 git log 命令列出历史提交记录如下:

$ git log
commit afe967395ee4f91624f70eb9322006b329829493 (HEAD -> master)
Author: Smile <testgit@qq.com>
Date:   Wed Jul 6 19:12:13 2022 +0800

    second commit

commit 70a5e3ef8a96eea22311ebb9388efc96702aacf7
Author: Smile <testgit@qq.com>
Date:   Wed Jul 6 19:01:10 2022 +0800

    first commit

 

需要友情提示的是,你看到的一大串类似afe967395...的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

我们可以用--pretty=oneline--oneline 选项来查看历史记录的简洁的版本。

$ git log --oneline
afe9673 (HEAD -> master) second commit
70a5e3e first commit

$ git log --pretty=oneline
b43d5bfe4e70be7b625da3aacc3621f10589ffb5 (HEAD -> master, music) add music.txt
0a85282238b0cd34b314d915f9e323d971a5e167 (game) delete temp.txt
926a0ca784611c685dc1617a66de1b05c6c722e1 test delete file
afe967395ee4f91624f70eb9322006b329829493 second commit
70a5e3ef8a96eea22311ebb9388efc96702aacf7 first commit

 

我们还可以用 --graph 选项,查看历史中什么时候出现了分支、合并。以下为相同的命令,开启了拓扑图选项:

$ git log --graph
* commit afe967395ee4f91624f70eb9322006b329829493 (HEAD -> master)
| Author: Smile <testgit@qq.com>
| Date:   Wed Jul 6 19:12:13 2022 +0800
|
|     second commit
|
* commit 70a5e3ef8a96eea22311ebb9388efc96702aacf7
  Author: Smile <testgit@qq.com>
  Date:   Wed Jul 6 19:01:10 2022 +0800

      first commit

 

你也可以用 --reverse 参数来逆向显示所有日志。

$ git log --reverse
commit 70a5e3ef8a96eea22311ebb9388efc96702aacf7
Author: Smile <testgit@qq.com>
Date:   Wed Jul 6 19:01:10 2022 +0800

    first commit

commit afe967395ee4f91624f70eb9322006b329829493 (HEAD -> master)
Author: Smile <testgit@qq.com>
Date:   Wed Jul 6 19:12:13 2022 +0800

    second commit

 

如果只想查找指定用户的提交日志可以使用命令:git log --author

$ git log --author=Smile
commit afe967395ee4f91624f70eb9322006b329829493 (HEAD -> master)
Author: Smile <testgit@qq.com>
Date:   Wed Jul 6 19:12:13 2022 +0800

    second commit

commit 70a5e3ef8a96eea22311ebb9388efc96702aacf7
Author: Smile <testgit@qq.com>
Date:   Wed Jul 6 19:01:10 2022 +0800

    first commit

 

如果你要指定日期,可以执行几个选项:--since--before,但是你也可以用 --until--after

$ git log --oneline --before={3.weeks.ago} --after={2022-07-6} --no-merges

 

git blame

如果要查看指定文件的修改记录可以使用 git blame 命令,以列表形式显示修改记录,格式如下:

git blame <file>
$ git blame readme.txt
^70a5e3e (Smile 2022-07-06 19:01:10 +0800 1) hello git!!
afe96739 (Smile 2022-07-06 19:12:13 +0800 2)
afe96739 (Smile 2022-07-06 19:12:13 +0800 3) test diff

 

git reflog

git reflog查看命令历史

$ git reflog
afe9673 (HEAD -> master) HEAD@{0}: commit: second commit
70a5e3e HEAD@{1}: commit (initial): first commit

 

总结

git log 
git reflog  #常用
git log --greph #图形显示,更直观
git log --pretty=oneline #漂亮一行显示
git log --oneline #简洁显示
说明:HEAD@{移动到当前版本需要多少步}

 

5.回退版本

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交afe96739...,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

git reset

git reset 命令用于回退版本,可以指定退回某一次提交的版本。

git reset 命令语法格式如下:

git reset [--soft | --mixed | --hard] [HEAD]

--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变

git reset  [HEAD] 

实例:

$ git reset HEAD^            # 回退所有内容到上一个版本  
$ git reset HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本  
$ git  reset  052e           # 回退到指定版本

--soft 参数用于回退到某个版本:

git reset --soft HEAD

实例:

$ git reset --soft HEAD~3   # 回退上上上一个版本 

--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:

git reset --hard HEAD

实例:

$ git reset --hard HEAD~3  # 回退上上上一个版本  
$ git reset –hard bae128  # 回退到某个版本回退点之前的所有信息。 
$ git reset --hard origin/master    # 将本地的状态回退到和远程的一样 

注意:谨慎使用 –hard 参数,它会删除回退点之前的所有信息。

HEAD 说明:

  • HEAD 表示当前版本
  • HEAD^ 上一个版本
  • HEAD^^ 上上一个版本
  • HEAD^ 上上上一个版本
  • 以此类推... 

可以使用 ~数字表示

  • HEAD~0 表示当前版本
  • HEAD~1 上一个版本
  • HEAD^2 上上一个版本
  • HEAD^3 上上上一个版本
  • 以此类推... 

git reset HEAD

git reset HEAD 命令用于取消已缓存的内容。

 

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

总结

  • 基于索引值推荐
    git reset --hard 指针位置
    例子:git reset --hard a6ace91 #回到这个状态
    
  • 使用 ^ 符号只能后退
    git reset --hard HEAD^
    例子:git reset --hard HEAD^^
    注意:几个 ^ 表示后退几步
    
  • 使用 ~ 符号只能后退
    git reset --hard HEAD~n
    例子:git reset --hard HEAD~3
    

reset的三个参数比较

soft: 
  - 仅本地库移动HEAD 指针
mixed:
  - 在本地库移动HEAD指针
  - 重置暂存区
hard:
  - 在本地库移动HEAD指针
  - 重置暂存区
  - 重置工作区

 

用命令git reset HEAD <file>还可以把暂存区的修改撤销掉(unstage),重新放回工作区,也就是git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

6.撤销修改

git checkout

git checkout -- file可以丢弃工作区的修改。

注意:此时还没有将该文件进行add到暂存区!

$ git checkout -- readme.txt

 

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

 

git restore

$ git restore readme.txt

 

作用与git checkout相同。

命令 作用 备注
git restore --worktree README.md 表示撤销 README.md 文件工作区的的修改 参数等同于 -W
git restore --staged README.md 表示撤销暂存区的修改,将文件状态恢复到未 add 之前 参数等同于 -S
git restore -s HEAD~1 README.md 表示将当前工作区切换到上个 commit 版本
git restore -s dbv213 README.md 表示将当前工作区切换到指定 commit id 的版本

 

7.删除文件

git rm

git rm 命令用于删除文件。

如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。

git rm 删除文件有以下几种形式:

1、将文件从暂存区和工作区中删除:

git rm <file>

 

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f

git rm -f readme.txt 

 

如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:

git rm --cached <file>

 

如果被删除的文件已经被提交到了本地仓库中,此时通过git rm 命令删除后还需要再次提交!

8.Git分支管理

创建分支

git branch 分支名

$ git branch dev

 

查看分支

git branch
git branch -v 

$ git branch
* master

$ git branch -v
* master 0a85282 delete temp.txt

 

切换分支

git checkout 分支名
git checkout -b 分支名   #创建分支并直接切换到该分支

$ git checkout dev
Switched to branch 'dev'

$ git checkout -b game
Switched to a new branch 'game'

 

最新版本的Git提供了新的git switch命令来切换分支:

$ git switch master
Switched to branch 'master'

$ git switch -c music
Switched to a new branch 'music'

 

合并分支

  • 合并分支相当于把修改了的文件拉过来
git merge xxx
注意:合并分支的时候要明确谁谁合并
	我在a分支里面修改了。要合并到master,就先切换到master,然后合并b
	
	
$ git merge music
Updating 0a85282..b43d5bf
Fast-forward
 music.txt | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 music.txt

 

删除分支

git branch -d 分支名

$ git branch -d dev
Deleted branch dev (was 0a85282).

 

总结

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>或者git switch <name>

创建+切换分支:git checkout -b <name>或者git switch -c <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

 

解决冲突

  • 冲突的表现
  • 冲突的解决
    • 第一步:编辑,删除特殊标记<<< ===
    • 第二步:修改到满意位置,保存退出
    • 第三步:添加到缓存区 git add 文件名
    • 第四步:提交到本地库git commit -m '日志信息' 注意:后面一定不能带文件名

git log --graph命令可以看到分支合并图。

9.Git远程仓库

创建远程仓库

常用代码托管平台:

image-20220707172534290

image-20220707172932663

 

连接远程仓库

此操作是先初始化本地库,然后与已创建的远程库进行对接

$ git init
Initialized empty Git repository in D:/myGit/.git/

 

我们要将本地仓库和远程仓库连接起来,一般一个本地仓库对应一个远程仓库远侧,远程仓库默认名为origin

  • 命令: git remote add <远端名称> <仓库路径SSH>
    • 远端名称,默认是origin,取决于远端服务器设置
    • 仓库路径,从远端服务器获取此SSH,
git remote -v  #查看远程地址别名
git remote add 别名 远程地址 

$ git remote add origin https://github.com/LoveCoding6/myGitRepo.git
$ git remote -v
origin  https://github.com/LoveCoding6/myGitRepo.git (fetch)
origin  https://github.com/LoveCoding6/myGitRepo.git (push)

 

克隆

完整的把远程库克隆到本地克隆下来后不要在主分支里面做开发clone进行一次,从无到有的过程,更新用pull

git clone  远程地址
例子:git clone https://xx

 

推送

开发修改完把本地库的文件推送到远程仓库前提是提交到了本地库才可以推送

git push 别名 分支名
git push -u 别名 分支名    #-u指定默认主机
例子:git push origin master

 

命令:git push [-f] [–set-upstream] [远端名称 [本地分支名][:远端分支名] ]

  • 如果远程分支名和本地分支名称相同,则可以只写本地分支本来是:git push origin master :master 表示将本地仓库的master分支提交到远程仓库的master分支
    • git push origin master 这里表示将本地仓库当前master分支的内容推到远程仓库上面去
  • -f 表示强制覆盖
  • –set-upstream 推送到远端的同时并且建立起和远端分支的关联关系。
    • git push --set-upstream origin master
  • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名。

拉取

本地存在clone下来的文件 就用pull更新

pull = fetch + merge
git fetch 别名 分支名
git merge 别名 分支名
git pull 别名 分支名

 

微信关注

编程那点事儿

本站为非盈利性站点,所有资源、文章等仅供学习参考,并不贩卖软件且不存在任何商业目的及用途,如果您访问和下载某文件,表示您同意只将此文件用于参考、学习而非其他用途。
本站所发布的一切软件资源、文章内容、页面内容可能整理来自于互联网,在此郑重声明本站仅限用于学习和研究目的;并告知用户不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
如果本站相关内容有侵犯到您的合法权益,请仔细阅读本站公布的投诉指引页相关内容联系我,依法依规进行处理!
作者:理想
链接:https://www.imyjs.cn/archives/912
THE END
二维码
【Git】基本配置与常用命令演示
  一、配置Git Git 提供了一个叫做 git config……
<<上一篇
下一篇>>
文章目录
关闭
目 录