[git] 常用操作

服务器端创建仓库

[git@myw gitrepo]$ git init --bare gittest.git
初始化空的 Git 版本库于 /home/git/gitrepo/gittest.git/

 

客户端克隆项目

使用Git Bash Here打开一个终端

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces
$ git clone git@192.168.40.180:/home/git/gitrepo/gittest.git
Cloning into 'gittest'...
git@192.168.40.180's password:
warning: You appear to have cloned an empty repository.

 

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces
$ cd gittest/

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$
 

输入git用户密码;

我的是一个空的工程, 所有会有一行警告;

进入gittest目录;

默认只有一个master主干;

可以创建分支(branch), 里程碑(tag), 这个跟svn概念是一样的;

 

git提交流程

工作区 --> 缓存 --> 本地仓库 --> 远程仓库

git分为缓存,本地仓库和远程仓库;

提交流程:

先添加(add)到缓存, 然后提交(commit)到本地仓库, 最后提交(push)到远程仓库

 

工作区添加文件

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ touch data.txt

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ vim data.txt

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git status -s
?? data.txt

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$
 

创建一个文件data.txt;

git status 查看工作区代码相对于暂存区的差别;

data.txt前边有状态码:

?? 表示尚未添加到缓存的文件

D 表示删除的文件

M 表示修改的文件

A 表示已添加到缓存

 

添加到缓存

把当前目录提交到缓存

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git add .

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git status -s
A  data.txt
 

add 用来把变更添加到缓存

A 表示缓存中添加的文件

 

问题:

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git add .
warning: LF will be replaced by CRLF in data.txt.
The file will have its original line endings in your working directory

git add .  会报错需要设置git

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git config --global core.autocrlf true

恢复缓存

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git reset

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git status -s
?? data.txt

git reset 缓存恢复到仓库版本;

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git rm --cached data.txt
rm 'data.txt'

git rm从缓存区中删除data.txt;

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git rm --f data.txt
rm 'data.txt'

git rm --f 从缓存区中删除data.txt, 同时也会从工作区中删除;

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git rm -r --cached .
rm 'data.txt'

删除缓存中当前目录(.)下所有人间;

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git rm -rf .
rm 'data.txt'

git rm -rf 从缓存区中删除当前目录, 同时也会从工作区中删除;

 

添加到本地仓库

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git commit -m '添加一个文件'
[master (root-commit) b103708] 添加一个文件
 1 file changed, 6 insertions(+)
 create mode 100644 data.txt

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git status -s

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$

提交data.txt到本地仓库;

这注意的是status已经跟工作区没有任何差别了;

 

查看提交日志

git log 命令用来查看提交日志历史;

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git log
commit b1037086e1cefeb67c70168fdddc185147c5b067 (HEAD -> master)
Author: mayuwei <mayuwei@ebupt.com>
Date:   Fri Sep 6 19:34:29 2019 +0800

    添加一个文件

每次提交后都会生成一个唯一的commit ID标识;

b1037086e1cefeb67c70168fdddc185147c5b067 是git这次commit的版本ID;

HEAD -> master 表示当前是master主分支;

 

修改

修改data.txt文件

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git status -s
 M data.txt

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git add .

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git status -s
M  data.txt

M红色表示未添加到缓存区, 绿色表示已添加到缓存区;

 

再提交一次版本, 现在有两个commit版本 72834517dc525150d899856f2b6fe08a2f8bec3e 和 b1037086e1cefeb67c70168fdddc185147c5b067;

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git log
commit 72834517dc525150d899856f2b6fe08a2f8bec3e (HEAD -> master)
Author: mayuwei <mayuwei@ebupt.com>
Date:   Fri Sep 6 19:55:13 2019 +0800

    修改一个文件

commit b1037086e1cefeb67c70168fdddc185147c5b067
Author: mayuwei <mayuwei@ebupt.com>
Date:   Fri Sep 6 19:34:29 2019 +0800

    添加一个文件

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$

 

撤销修改

修改data.txt

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git status -s
M  data.txt

如果不想修改了, 还原到修改之前的文件内容可以使用reset命令;

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git reset HEAD
Unstaged changes after reset:
M       data.txt

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git status -s
 M data.txt
 

会把缓存区恢复到HEAD指向的master主分支;

 

还可以同时还原缓存和工作区, 到一个commit版本

git reset --hard <commit_id>

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git reset --hard b1037086e1cefeb67c70168fdddc185147c5b067
HEAD is now at b103708 添加一个文件

同时这个版本之后的新版本会舍弃;

$ git log
commit b1037086e1cefeb67c70168fdddc185147c5b067 (HEAD -> master)
Author: mayuwei <mayuwei@ebupt.com>
Date:   Fri Sep 6 19:34:29 2019 +0800

    添加一个文件

现在log中只有尾号是067的版本,  之前的c3e版本已经没有了;

除了--hard,  还有--mixed 和 --soft 方式

--hard : 回退commit log, 并还原缓存, 工作区;

--mixed : 回退commit log, 还原缓存区, 不还原工作区;

--soft :  只是回退commit log;

 

查看远程仓库

提交远程仓库之前可以先看下远程仓库信息;

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git remote show
origin

现在只有一个origin仓库, master分支

 

也可以通过git remote查看;

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git remote -v
origin  git@192.168.40.180:/home/git/gitrepo/gittest.git (fetch)
origin  git@192.168.40.180:/home/git/gitrepo/gittest.git (push)

 

提交远程仓库

通过push把本地仓库commit更新到远程仓库;

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git push origin master
git@192.168.40.180's password:
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 454 bytes | 151.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To 192.168.40.180:/home/git/gitrepo/gittest.git
 * [new branch]      master -> master

show查看仓库信息

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git show -s
commit ac686bce37b31db955eb322def5aab24a4c7330b (HEAD -> master, origin/master)
Author: mayuwei <mayuwei@ebupt.com>
Date:   Mon Sep 9 18:31:11 2019 +0800

    修改一个文件

 

更新远程仓库到本地

正常情况下push之前需要先同步下远程仓库代码到本地, 解决冲突问题;

在跟新之前先要了解git内部存储机制;

打开工作区目录, 会有一个.git隐藏文件夹;

里面有refs文件夹, 三个目录 heads, remotes,tags三个目录

remotes保存了远程分支的副本;

head是本地分支;

 

使用fetch进行更新;

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git fetch origin
git@192.168.40.180's password:
 

fetch origin会把远程最新的代码跟新到remotes副本, 不会影响head本地分支;

 

 

 

使用git pull目录更新

19941@LAPTOP-I79HMI93 MINGW64 ~/Desktop/ces/gittest (master)
$ git pull
git@192.168.40.180's password:
Already up to date.
 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值