git 中基本命令操作学习第一篇

统一说明:

<file>...
## 这种格式代表添加的文件,比如现在有两个文件:first.text,dir/second.txt
## 以 git add 命令说明:
## 添加单个文件:
git add first.txt
## 添加多个文件:
git add first.txt dir/second.txt
## 添加当前目录及子目录下所有变动文件
git add .

初始化一个仓库

  • 创建一个本地仓库
## 在当前文件夹初始化一个仓库
git init 
  • 从远程clone一个仓库
## 克隆一个远程仓库
git clone url

用户信息配置

安装完Git后,就需要配置用户名和邮箱,每一个git commit都需要用到这个配置信息,必须配置

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

提交本地修改代码到本地仓库

  • 有新增文件

git add <file>... ##将文件添加到 index/stage

git add .
git commit -m "commit msg"
  • 无新增文件
git commit -a -m "commit msg"

修改撤销

1. workspace修改的撤销(也就是文件修改了,git add 之前的撤销)

  • 新增文件

rm <file>... ## 删除某个文件,如果是文件夹需要加 -rf 强制删除

## 直接删除文件
rm add.txt
  • 删除和修改的文件

git checkout -- <file>... ##将文件替换成index的内容;如果文件没有git add过,则不会有变化。

## 千万注意 --不要忘记了
git checkout -- .

2. index/stage 修改的撤销(也就是 git add后的撤销)

git reset HEAD <file>... ##将文件对应的index替换成最近一次提交的状态

  • 撤销到git add之前
## 这个是git add . 的反向操作 
git reset HEAD . 
##或者
git reset HEAD ##不要点符号

执行上面操作后,文件就回到git add 之前了

  • 撤销到workspace修改之前
git checkout HEAD -- .

执行上面操作后修改和删除都会撤销,新增还在在stage

git reset --hard HEAD

执行上面操作后,所有修改都会撤销

3. repository 修改的撤销(也就是 git commit后的撤销)

  • 撤销到git commit之前

下面命令任选一个

git reset --soft HEAD^
git reset --soft HEAD^1
git reset --soft HEAD~
git reset --soft HEAD~1
git reset --soft commitHash ##最近提交的之前一个commit 通过git log -2

执行上面命令就回退到git commit之前,可以用于重新修改commit msg

  • 撤销到git add之前

下面命令任选一个 默认参数 --mixed

git reset HEAD^
git reset HEAD^1
git reset HEAD~
git reset HEAD~1
git reset commitHash ##最近提交的之前一个commit 通过git log -2

执行上面命令就回退到git add之前,也就是workspace修改之后

  • 撤销到workspace修改之前

下面命令任选一个

git reset --hard HEAD^
git reset --hard HEAD^1
git reset --hard HEAD~
git reset --hard HEAD~1
git reset --hard commitHash ##最近提交的之前一个commit 通过git log -2

执行上面操作后,所有修改都会撤销

拉取服务器仓库内容和推送本地仓库内容到服务器仓库

-查看地仓库关联的远程配置信息
本地仓库一般都是通过 git clone url 拉取的,所以自动配置了远程
查看本地仓库的远程配置

$ git remote -v
origin  C:/Users/my/Desktop/git_cmd_study/client/../server/ (fetch)
origin  C:/Users/my/Desktop/git_cmd_study/client/../server/ (push)
##我是用本地的仓库作为远程来模拟的,所以url是本地的

查看某个远程仓库

$ git remote show origin
* remote origin
  Fetch URL: C:/Users/my/Desktop/git_cmd_study/client/../server/
  Push  URL: C:/Users/my/Desktop/git_cmd_study/client/../server/
  HEAD branch: develop
  Remote branches:
    develop tracked
    master  tracked
  Local branch configured for 'git pull':
    develop merges with remote develop
  Local ref configured for 'git push':
    develop pushes to develop (up to date)

远程仓库是ok的那就开始拉取远程仓库内容

  • git fetch + git merge 拉取远程仓库内容
$ git fetch
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From C:/Users/my/Desktop/git_cmd_study/client/../server
   c91a69d..ec7df6c  develop    -> origin/develop

git fetch会将服务器仓库内容拉取下来,不改变当前的工作目录和HEAD,保存服务器的头在FETCH_HEAD,还需要通过git merge合并到当前的HEAD

$ git merge FETCH_HEAD
Updating c91a69d..ec7df6c
Fast-forward
 add.txt | 1 +
 1 file changed, 1 insertion(+)

如果合并有冲突就解决冲突后,再提交和推送(git push)

  • git pull 拉取远程仓库内容
    git pull 就是上面两个步骤的合并,下面显示一个有冲突的示例:
~/Desktop/git_cmd_study/client (develop)
$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From C:/Users/KenMa/Desktop/git_cmd_study/client/../server
   ec7df6c..d1e08ec  develop    -> origin/develop
Auto-merging add.txt
CONFLICT (content): Merge conflict in add.txt
Automatic merge failed; fix conflicts and then commit the result.

~/Desktop/git_cmd_study/client (develop|MERGING)

之前的develop现在变成了develop|MERGING,也生成了一个MERGE_HEAD头;后面就是解决冲突和合并请求了

  • git push 推送本地仓库到服务器(git push之前可以先git pull一下)
$ git push
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 610 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/develop
remote: error: By default, updating the current branch in a non-bare repository
remote: is denied, because it will make the index and work tree inconsistent
remote: with what you pushed, and will require 'git reset --hard' to match
remote: the work tree to HEAD.
remote:
remote: You can set the 'receive.denyCurrentBranch' configuration variable
remote: to 'ignore' or 'warn' in the remote repository to allow pushing into
remote: its current branch; however, this is not recommended unless you
remote: arranged to update its work tree to match what you pushed in some
remote: other way.
remote:
remote: To squelch this message and still keep the default behaviour, set
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To C:/Users/my/Desktop/git_cmd_study/client/../server/
 ! [remote rejected] develop -> develop (branch is currently checked out)
error: failed to push some refs to 'C:/Users/my/Desktop/git_cmd_study/client/../server/'

从报错信息可以知道,由于远程仓库是一个non-bare仓库,有workspace,默认拒绝远程推送,解决方法:

  • git checkout master(服务器端) 切换到master分支再git push (客户端)
  • git config --local --add receive.denyCurrentBranch ignore (服务器端)设置忽略
  • 创建服务器仓库时使用 git init --bare 这样服务器仓库就没有workspace(这种仓库操作起来很不方便,不实用,最起码是我测试的时候)

总结:本文主要是罗列了一些常用的git 操作指令,满足一般的需求。操作如:

  • 创建git仓库
  • 提交修改到本地仓库
  • 撤销修改
  • 拉取服务器仓库内容
  • 推送本地修改到服务器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值