Git使用详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git使用详解相关的知识,希望对你有一定的参考价值。

版本控制

git status 查看状态

git add .

git commit -m 提交信息

git commit -a -m 3次提交项目代码

-a 只在commit提交过的文件,不用使用git add

  • git log :查看文件的修改日志

    查看某个文件的修改日志:git log 文件名
    
    查看当前路径所有文件的修改日志:git log
    
    用一行的方式查看简单的日志信息:git log ––pretty=oneline
    C:\\app\\hc>git log --pretty=oneline
    e7b4f344d8f6e073aa53b302de0c3941a2b2fb9c (HEAD -> master) 3次提交项目代码
    bdf5d830db2dd5ea15d4e090239e2edca530dfaa 项目2次提交
    f50b78aca87298bd99a9e92c0ab067054f2a8253 第一次提交,编写了一个user.txt
    
    查看最近的N次修改:git log –N(N是一个整数)
    
    # 查看最后一次提交修改的信息
    C:\\app\\hc>git log -1
    commit e7b4f344d8f6e073aa53b302de0c3941a2b2fb9c (HEAD -> master)
    Author: aa <aa@126.com>
    Date:   Fri Nov 26 16:51:52 2021 +0800
    
        3次提交项目代码
    
  • git diff :查看文件最新改动的地方

    查看某个文件的最新改动的地方:git diff 文件名
    查看当前路径所有文件最新改动的地方:git diff
    
  • git reflog :查看分支引用记录(能够查看所有的版本号)

    git rm:删除文件(删完之后要进行commit操作,才能同步到版本库)

    git reset:版本回退(建议加上––hard参数,git支持无限次后悔)

    回退到上一个版本:git reset ––hard HEAD^
    回退到上上一个版本:git reset ––hard HEAD^^
    回退到上N个版本:git reset ––hard HEAD~N(N是一个整数)
    
    回退到任意一个版本:git reset ––hard 版本号(版本号用7位即可)
    
$ git reflog
f50b78a (HEAD -> master) HEAD@0: reset: moving to HEAD^
bdf5d83 HEAD@1: reset: moving to HEAD^
e7b4f34 HEAD@2: commit: 3次提交项目代码
bdf5d83 HEAD@3: commit: 项目2次提交
f50b78a (HEAD -> master) HEAD@4: commit (initial): 第一次提交,编写了一个user.txt

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/app/hc (master)
$ git reset --hard bdf5d83
HEAD is now at bdf5d83 项目2次提交

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/app/hc (master)
$ git reset --hard e7
fatal: ambiguous argument e7: unknown revision or path not in the working tree.
Use -- to separate paths from revisions, like this:
git <command> [<revision>...] -- [<file>...]

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/app/hc (master)
$ git reset --hard e7b4f34
HEAD is now at e7b4f34 3次提交项目代码

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/app/hc (master)

版本库建立提交

配置

建立版本库

提交到版本库

git add .

git commit -m 提示

$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/app/hc (master)
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        user.txt

nothing added to commit but untracked files present (use "git add" to track)

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/app/hc (master)
$ git add user.txt

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/app/hc (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   user.txt


Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/app/hc (master)
$ git commit -m 第一次提交,编写了一个user.txt
[master (root-commit) f50b78a] 第一次提交,编写了一个user.txt
 1 file changed, 3 insertions(+)
 create mode 100644 user.txt

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/app/hc (master)
$ git status
On branch master
nothing to commit, working tree clean

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/app/hc (master)
$
  • git status:查文件的状态

    查看某个文件的状态:git status 文件名
    查看当前路径所有文件的状态:git status
    
  • git add : 将工作区的文件保存到暂缓区

    #保存某个文件到暂缓区:git add 文件名
    #保存当前路径的所有文件到暂缓区:git add .(注意,最后是一个点 . )
    
  • git commit:将暂缓区的文件提交到当前分支

    #提交某个文件到分支:git commit -m ”注释” 文件名
    #保存当前路径的所有文件到分支:git commit -m ”注释”
    

远程仓库

git clone 项目

git push

生成/添加SSH公钥

C:\\>git clone git@gitee.com:webrx/ssm202102.git
Cloning into ssm202102...
remote: Enumerating objects: 32, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 32 (delta 2), reused 0 (delta 0), pack-reused 0R
Receiving objects: 100% (32/32), 17.66 KiB | 1.36 MiB/s, done.
Resolving deltas: 100% (2/2), done.

C:\\>cd ssm202102

C:\\ssm202102>git add .

C:\\ssm202102>git commit -m db3333
[master 7f978c1] db3333
 1 file changed, 1 insertion(+), 1 deletion(-)

C:\\ssm202102>git remote add origin git@gitee.com:webrx/ssm202102.git
error: remote origin already exists.

C:\\ssm202102>git remote remove origin

C:\\ssm202102>git remote add origin git@gitee.com:webrx/ssm202102.git

C:\\ssm202102>git push origin master
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 4 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 471 bytes | 235.00 KiB/s, done.
Total 6 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To gitee.com:webrx/ssm202102.git
   a6d11e0..7f978c1  master -> master

C:\\ssm202102>

分支操作

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一个源代码目录的副本。对于大项目来说,这样的过程会耗费很多时间。

有人把 Git 的分支模型称为它的“必杀技特性”,也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出。 为何 Git 的分支模型如此出众呢? Git 处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。 与许多其它版本控制系统不同,Git 鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次。 理解和精通这一特性,你便会意识到 Git 是如此的强大而又独特,并且从此真正改变你的开发方式。

# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 列出所有本地分支和远程分支
$ git branch -a

# 新建一个分支,但依然停留在当前分支
$ git branch test

# 新建一个分支,并切换到该分支
$ git checkout -b dev

# 新建一个分支,指向指定commit
$ git branch [branch] [commit]

# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]

# 切换到指定分支,并更新工作区
$ git checkout [branch-name]

# 切换到上一个分支
$ git checkout -

# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到当前分支
$ git merge [branch]

# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/ssm202102 (dev)
$ git branch -r
  origin/master

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/ssm202102 (dev)
$ git push origin dev
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
remote: Create a pull request for dev on Gitee by visiting:
remote:     https://gitee.com/webrx/ssm202102/pull/new/webrx:dev...webr
To gitee.com:webrx/ssm202102.git
 * [new branch]      dev -> dev

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/ssm202102 (dev)
$ git branch -r
  origin/dev
  origin/master

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/ssm202102 (dev)
$ git push origin test
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
remote: Create a pull request for test on Gitee by visiting:
remote:     https://gitee.com/webrx/ssm202102/pull/new/webrx:test...web
To gitee.com:webrx/ssm202102.git
 * [new branch]      test -> test

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/ssm202102 (dev)
$

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/ssm202102 (dev)
$ git branch -r
  origin/dev
  origin/master
  origin/test

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/ssm202102 (dev)
$ git branch
* dev
  master
  test

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/ssm202102 (dev)
$ git checkout master
Switched to branch master

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/ssm202102 (master)
$ git branch
  dev
* master
  test

Administrator@MS-TTZDNNIIFOSQ MINGW64 /c/ssm202102 (master)
$

git clone https://github.com/alibaba/fastjson.git -b 1.1.44 fj1.1.44
cd fj1.1.44 
git branch
* 1.1.44

git clone https://github.com/alibaba/fastjson.git fj
cd fj
git branch 
* master

标签管理

像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点( v1.0v2.0 等等)。 在本节中,你将会学习如何列出已有的标签、如何创建和删除新的标签、以及不同类型的标签分别是什么。

# 列出所有tag
$ git tag

# 新建一个tag在当前commit
$ git tag [tag]

$ git tag 1.0

# 新建一个tag在指定commit
$ git tag [tag] [commit]

# 删除本地tag
$ git tag -d [tag]

# 删除远程tag
$ git push origin :refs/tags/[tagName]

# 查看tag信息
$ git show [tag]
$ git show 1.0

# 提交指定tag
$ git push [remote] [tag]
$ git push origin 1.0
# 提交所有tag
$ git push [remote] --tags

# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

以上是关于Git使用详解的主要内容,如果未能解决你的问题,请参考以下文章

git初识

SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤

git的使用

Git 分支

[git] git 分支( branch ) 的基本使用

Git 分支管理