目录

一、概念理解

(一)工作区、暂存区、本地仓库、远程仓库

(二)远程分支、当前本地分支

(三)常用命令

1.git init

2.git clone

3.git pull、git fetch

4.git add

5.git commit

6.git reset

7.git branch

8.git status

9.git checkout

10.git push

11.git merge

12.git rebase

13.git revert

14.git log

15.git remote

15.git config 命令

16.git rm

17.git tag


一、概念理解

(一)工作区、暂存区、本地仓库、远程仓库

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:本地仓库
  • remote repository:远程仓库

https://github.com/liyinchigithub/Git-commandshttps://github.com/liyinchigithub/Git-commands

(二)远程分支、当前本地分支

(三)常用命令

1.git init

新项目执行Git初始化,并进行第一次提交

git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/liyinchigithub/Git-commands.git
git push origin master

2.git clone

对github、gitlab远程仓库,已有项目进行克隆

git clone https://github.com/liyinchigithub/Git-commands.git

3.git pull、git fetch

(1)将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。

git pull origin
git pull https://github.com/liyinchigithub/Git-commands.git

 远程分支是与当前分支合并

git pull origin master

(2)拉取代码,但不合并到本地

git fetch --all
git fetch --tags
git reset --hard origin/master

(3)git pull 与git fetch区别:

  • 远端跟踪分支不同

git fetch能够直接更改远端跟踪分支。

git pull无法直接对远程跟踪分支操作,我们必须先切回本地分支然后创建一个新的commit提交。

  • 拉取不同

git fetch会将数据拉取到本地仓库,它并不会自动合并或修改当前的工作

git pull是从远程获取最新版本并merge到本地,会自动合并或修改当前的工作

  • commitID不同

使用git fetch更新代码,本地的库中master的commitID不变,还是等于1。

使用git pull更新代码,本地的库中master的commitID发生改变,变成了2。

4.git add

(1)添加指定目录到暂存区,包括子目录:

git add [dir]

例如:添加2个文件到暂存区

git add README hello.js 

(2)添加当前目录下的所有文件到暂存区:

git add .

5.git commit

将暂存区内容添加到本地仓库中

git commit -m "提交内容备注"

在执行git add .  之后执行git commit

6.git reset

(1)回滚代码,撤销某一次commit,并强推到远程仓库

如果需要删除的 commit 是最新的,那么可以通过 git reset 命令将代码回滚到之前某次提交的状态,但一定要将现有的代码做好备份,否则回滚之后这些变动都会消失。具体操作如下:

git log // 查询要回滚的 commit_id

git reset --hard commit_id // HEAD 就会指向此次的提交记录

git push origin HEAD --force // 强制推送到远端

(2)回退所有内容到上一个版本

git reset HEAD^

(3)回退 hello.js 文件的版本到上一个版本

git reset HEAD^ hello.js

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

执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存 。

(4)回退到指定版本

查看提交日志,回退到指定commit_id

git log
git reset --hard commit_id

 或者

git reset 052e

(5)回退上上上一个版本

git reset --soft HEAD~3

备注:此次提交之后的修改会被退回到暂存区

(6)回退到某个版本回退点之前的所有信息。

git reset –hard bae128

备注:此次提交之后的修改不做任何保留,git status 查看工作区是没有记录的。

(7)将本地的状态回退到和远程的一样

git reset --hard origin/master

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

(8)HEAD 说明:

  • HEAD 表示当前版本

  • HEAD^ 上一个版本

  • HEAD^^ 上上一个版本

  • HEAD^^^ 上上上一个版本

  • 以此类推...

可以使用 ~数字表示

  • HEAD~0 表示当前版本

  • HEAD~1 上一个版本

  • HEAD^2 上上一个版本

  • HEAD^3 上上上一个版本

  • 以此类推...


(9)误删恢复

如果回滚代码之后发现复制错了 commit_id,或者误删了某次 commit 记录,也可以通过下方代码恢复:

git relog // 复制要恢复操作的前面的 hash 值

git reset --hard hash // 将 hash 换成要恢复的历史记录的 hash 值

注意:删除中间某次提交时最好不要用 git reset 回退远程库,因为之后其他人提交代码时用 git pull 也会把自己的本地仓库回退到之前的版本,容易出现差错进而增加不必要的工作量。

7.git branch

(1)新建分支

git branch 新建的分支名

 (2)查看所有分支信息

git branch

(3) 删除分支

git branch master
git branch -d 分支名称

删除分支前,需要切换到其他分支 

 ①删除本地分支

git branch
git checkout master
git branch -d 本地分支名

②删除远程分支

git push origin --delete 远程分支名称

如何本地分支已提交到远程仓库,想删除这个分支,除了删除本地分支,还需要远程分支也要删除,以上两个命令都要执行一次。

8.git status

查看当前分支状态

$ git status
On branch master

Initial commit

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

    new file:   README
    new file:   hello.php

9.git checkout

切换分支

10.git push

(1)将本地的 master 分支推送到 origin 主机的 master 分支。

git push origin master

(2)本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:

git push --force origin master

(3)指定分支

git push <远程主机名> <本地分支名>:<远程分支名>

 完整操作

git branch
git checkout 分支名
修改代码
git add .
git commit -m "提交内容注释"
git push origin master

远程项目仓库对提交上来的分支代码还有做merge操作,才可以把分支代码合并到master中

11.git merge

(1)开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支

git checkout dev
git pull
git checkout master
git merge dev
git push -u origin master


(2)当master代码改动了,需要更新开发分支(dev)上的代码

git checkout master 
git pull 
git checkout dev
git merge master 
git push -u origin dev


 

12.git rebase

当两个分支不在一条线上,需要执行 merge 操作时使用该命令。

(1)撤销提交

如果中间的某次 commit 需要删除,可以通过 git rebase 命令实现,方法如下:

git log // 查找要删除的前一次提交的 commit_id

git rebase -i commit_id // 将 commit_id 替换成复制的值

进入 Vim 编辑模式,将要删除的 commit 前面的 `pick` 改成 `drop`

保存并退出 Vim

(2)解决冲突

该命令执行时极有可能出现 reabase 冲突,可以通过以下方法解决:

git diff // 查看冲突内容

// 手动解决冲突(冲突位置已在文件中标明)

git add <file> 或 git add -A // 添加

git rebase --continue // 继续 rebase

// 若还在 rebase 状态,则重复 2、3、4,直至 rebase 完成出现 applying 字样

git push

13.git revert

  • git revert:放弃某次提交。
    git revert 之前的提交仍会保留在 git log 中,而此次撤销会做为一次新的提交。
  • git revert -m:用于对 merge 节点的操作,-m 指定具体某个提交点。

(1)撤销提交

要撤销中间某次提交时,使用 git revert 也是一个很好的选择:

git log // 查找需要撤销的 commit_id

git revert commit_id  // 撤销这次提交

(2)撤销 merge 节点提交

如果这次提交是 merge 节点的话,则需要加上 -m 指令:

git revert commit_id -m 1 // 第一个提交点

// 手动解决冲突

git add -A

git commit -m ""

git revert commit_id -m 2 // 第二个提交点

// 重复 2,3,4

git push


14.git log

(1)查看提交历史

(2)用 --oneline 选项来查看历史记录的简洁的版本

git log --oneline

(3)可以用 --graph 选项,查看历史中什么时候出现了分支、合并。

 

 (4)可以用 --reverse 参数来逆向显示所有日志。

git log --reverse --oneline

 (5)如果只想查找指定用户的提交日志

git log --author

 例如,比方说我们要找 Git 源码中 liyinchi 提交的部分

git log --author=Linus --oneline -5

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

git log --oneline --before={3.weeks.ago} --after={2020-04-23} --no-merges

 (7)git blame

git blame <file>

15.git remote

远程仓库操作

git remote show [remote]
git remote show https://github.com/liyinchigithub/Git-commands

(1)添加远程版本库

一般在新建项目时使用

git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/liyinchigithub/Git-commands.git
git push -u origin master

(2)删除远程仓库

git remote rm name

(3)修改仓库名

git remote rename old_name new_name 

15.git config 命令

(1)显示当前的 git 配置信息

git config --list
credential.helper=osxkeychain
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true

(2)编辑当前的 git 配置信息

git config -e

16.git rm

如果需要删除的 commit 是一个或多个文件,可以进行以下操作。

(1)被提交到仓库的某个文件需要删除,可以使用 git rm 命令:

git rm <file> // 从工作区和暂存区删除某个文件

git commit -m "" // 再次提交到仓库

(2)如果只想从暂存区删除文件,本地工作区不做出改变,可以:

git rm --cached <file>

(3)如果在工作区不小心删错了某个文件,可以用 git checkout 将暂存区的文件覆盖工作区的文件,从而把误删的文件恢复:

git checkout -- <file>

(4)用 git rm 删除文件,同时还会将这个删除操作记录下来;

用 rm 删除文件,删除的仅仅是本地物理文件,没有将其从 git 的记录中剔除。

(5)git add 和 git rm 区别,

git add 仅能记录添加、改动的动作,删除的动作需靠 git rm 来完成。

17.git tag

(1)打标签

到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签

git tag -a v1.0 -m "release 1.0 version"

git push origin :v1.0

或者,每次

git push origin tag v1.x

(2)查看本地标签

git tag

(3)查看远程 tag

git ls-remote --tags origin

(4)将本地tag推送到远程

git push origin v1.0

也可以仅执行该句,会自动生成本地tag并推送到远程


(5)完整打标签并推送到远程仓库

git add .

git commit -m "first commit"

git push origin master

git push origin v1.0

或者 

git add .

git commit -m "first commit"

git push origin master

git tag -a v1.1 -m "release 1.0 version"

git tag

git push origin :v1.1

(6)删除本地标签

git tag
git tag -d 标签名

(7)删除远程标签

git push origin :refs/tags/v1.0

(8)追加标签

如果我们忘了给某个提交打标签,又将它发布了,我们可以给它追加标签。

$ git tag -a v0.9 85fc7e7
$ git log --oneline --decorate --graph
*   d5e9fc2 (HEAD -> master) Merge branch 'change_site'
|\  
| * 7774248 (change_site) changed the runoob.php
* | c68142b 修改代码
|/  
* c1501a2 removed test.txt、add runoob.php
* 3e92c19 add test.txt
* 3b58100 (tag: v0.9) 第一次版本提交

常见问题

1.执行git push origin 提示”git hint: Please, commit your changes before merging“

解决办法:

简洁显示日志记录
 

git log --pretty=oneline 

git reset --hard 提交id

 

2.执行git pull 提示”error: You have not concluded your merge (MERGE_HEAD exists).
hint: Please, commit your changes before merging.
fatal: Exiting because of unfinished merge.“

 解决办法:

git reset --soft HEAD^

如果要要撤销第六次 commit 就要把 HEAD 指向 第五次 所以 reset 一下 HEAD 就好
注意:工作空间的代码的改动就没了
如果想保留工作空间的代码只是撤销commit,请执行下面的命令:
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐