Git常用操作

4 篇文章 0 订阅

Git常用操作

  1. 提交新文件

第一步添加文件:git add readme.txt //文件必须在git的仓库目下
第二步提交变动:git commit readme.txt //或者 git commit readme.txt -m “添加readme.txt文件,这里必须写入说明”

  1. 提交修改
  • git status命令查看仓库当前的状态

位于分支 master
尚未暂存以备提交的变更:
(使用 “git add <文件>…” 更新要提交的内容)
(使用 “git checkout – <文件>…” 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

  • git diff查看difference

$ git diff
diff --git a/readme.txt b/readme.txt
index 9bb4dfe…981a41b 100644
— a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
My first git file
+这里是第一次修改

  • git add ×× 命令添加文件至仓库,git status查看状态

$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 “git add <文件>…” 更新要提交的内容)
(使用 “git checkout – <文件>…” 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

  • git commit ×× -m “说明” 将文件提交。git status 查看仓库的当前状态

$ git status
位于分支 master
无文件要提交,干净的工作区

  1. git 回到历史版本
  • git log 查看记录

$ git log
commit 1c71f838147fe1ccba9d271b6e887d69e1953150
Author: adaivskenan adaivskenan@foxmail.com
Date: Sun May 15 09:33:08 2016 +0800
第二次修改
commit cdd599457423fa678fbbafad3fafc78dc827b0da
Author: adaivskenan adaivskenan@foxmail.com
Date: Sun May 15 00:46:59 2016 +0800
添加改动
commit bbd0121be8fab4cfbe49554bc65ffa732ffa9796
Author: adaivskenan adaivskenan@foxmail.com
Date: Sun May 15 00:06:23 2016 +0800
提交了我的第一个readme,这里是本次提交的说明

**查看可以加参数**  

$ git log --pretty=oneline
1c71f838147fe1ccba9d271b6e887d69e1953150 第二次修改
cdd599457423fa678fbbafad3fafc78dc827b0da 添加改动
bbd0121be8fab4cfbe49554bc65ffa732ffa9796 提交了我的第一个readme,这里是本次提交的说明

  • git reset --hard HEAD^ 用来回到上一个版本

$ git reset --hard HEAD^
HEAD 现在位于 cdd5994 添加改动
$ git log --pretty=oneline
cdd599457423fa678fbbafad3fafc78dc827b0da 添加改动
bbd0121be8fab4cfbe49554bc65ffa732ffa9796 提交了我的第一个readme,这里是本次提交的说明

  1. git 重返未来
  • git reflog 查看命令历史

$ git reflog
cdd5994 HEAD@{0}: reset: moving to HEAD^
1c71f83 HEAD@{1}: reset: moving to 1c71f83
cdd5994 HEAD@{2}: reset: moving to HEAD^
1c71f83 HEAD@{3}: commit: 第二次修改
cdd5994 HEAD@{4}: commit: 添加改动
bbd0121 HEAD@{5}: commit (initial): 提交了我的第一个readme,这里是本次提交的说明

  • git reset --hard commit_id 回到未来

$ git reset --hard 1c71f83
HEAD 现在位于 1c71f83 第二次修改
$ git log --pretty=oneline
1c71f838147fe1ccba9d271b6e887d69e1953150 第二次修改
cdd599457423fa678fbbafad3fafc78dc827b0da 添加改动
bbd0121be8fab4cfbe49554bc65ffa732ffa9796 提交了我的第一个readme,这里是本次提交的说明

  1. 撤销文件
  2. 撤销工作区文件
$ cat readme.txt

> My first git file

这里是第一\这是第二次修改加入中间\次修改
add操作
add后添加
$ vi readme.txt

$ cat readme.txt
> My first git file

这里是第一\这是第二次修改加入中间\次修改
add操作
add后添加
林俊杰JJ

**$ git checkout -- readme.txt**

$ cat readme.txt
> My first git file

这里是第一\这是第二次修改加入中间\次修改
add操作
add后添加

  1. 撤销缓存区文件
$ cat readme.txt
> My first git file

这里是第一\这是第二次修改加入中间\次修改
add操作
add后添加
JJ 林俊杰

$ git status可以看到此时文件在暂存区

> 位于分支 master

要提交的变更:
(使用 “git reset HEAD <文件>…” 以取消暂存)
修改: readme.txt

$ git reset HEAD readme.txt //重置暂存区

> 重置后取消暂存的变更:

M readme.txt

$ cat readme.txt //工作区此时并未改变

> My first git file

这里是第一\这是第二次修改加入中间\次修改
add操作
add后添加
JJ 林俊杰

$ git status

> 位于分支 master

尚未暂存以备提交的变更:
(使用 “git add <文件>…” 更新要提交的内容)
(使用 “git checkout – <文件>…” 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

$ git checkout -- readme.txt //丢弃工作区的改动

$ git status //此时文件以恢复HEAD的版本

> 位于分支 master

无文件要提交,干净的工作区

$ cat readme.txt

> My first git file

这里是第一\这是第二次修改加入中间\次修改
add操作
add后添

  1. 撤销版本库文件(没有进行push到远程库的操作)
参考**git 回到历史版本**,先将HEAD指向历史版本
  1. 删除文件
  2. 文件add到暂存后删除工作区文件
$ la

> .git  readme.txt  test.txt

$ git add test.txt

$ git status

> 位于分支 master

要提交的变更:
(使用 “git reset HEAD <文件>…” 以取消暂存)
新文件: test.txt

$ rm test.txt

$ git status

> 位于分支 master

要提交的变更:
(使用 “git reset HEAD <文件>…” 以取消暂存)
新文件: test.txt
尚未暂存以备提交的变更:
(使用 “git add/rm <文件>…” 更新要提交的内容)
(使用 “git checkout – <文件>…” 丢弃工作区的改动)
删除: test.txt

$ git rm test.txt

> rm 'test.txt'

$ git status

位于分支 master
无文件要提交,干净的工作区

  1. 文件commit到版本库后删除工作区文件
$ la

.git readme.txt test.txt

$ rm test.txt

$ git status

> 位于分支 master

尚未暂存以备提交的变更:
(使用 “git add/rm <文件>…” 更新要提交的内容)
(使用 “git checkout – <文件>…” 丢弃工作区的改动)
删除: test.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

$ git rm test.txt

> rm 'test.txt'

$ la

> .git  readme.txt

$ git status

> 位于分支 master

要提交的变更:
(使用 “git reset HEAD <文件>…” 以取消暂存)
删除: test.txt

$ git commit -m "remove text.txt"

> [master bcfd14e] remove text.txt

1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 test.txt

  1. 远程仓库
  2. SSH Key
    SSH Key为非对称加密的方式,及包含公钥和密钥。公钥存放在git远程服务器,用于校验是否是合法的用户在提交代码。密钥存放在本地,用于解密服务器端传送的数据。
SSH文件在用户的主目录中,我的SSH地址为**/home/adaivskenan/.ssh**。里面有id_rsa和id_rsa.pub两个文件,id_rsa为私钥,id_rsa.pub为公钥。如果没有需要用命令生成:
> $ ssh-keygen -t rsa -C "youremail@example.com

输入命令后不需要其它输入,一直**Enter**就可以
  1. 添加远程仓库
> git remote add origin git@github.com:adaivskenan/com.alex.qin.wechat.git

> git push -u origin maste

推送本地库的内容推送到远程。**由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令**

**关联后**,只要本地做了修改,就可以通过命令将master分支的最新修改推送至远程的github

> $ git push origin master
  1. 从远程库克隆
> git clone git@github.com:adaivskenan/com.alex.qin.wechat.git
  1. 分支管理
  2. 创建分支
![HEAD与master](https://img-blog.csdnimg.cn/img_convert/417cddcd1be1ed98ab1f44ff96df1386.png)

每次提交master都会向前移动。HEAD并不是指向提交,而是指向master,再由master指向提交。因此HEAD表示当前分支。

![master与dev](https://img-blog.csdnimg.cn/img_convert/de05bbe18a09121969cfe5bcbdb23344.png)

新建分支dev,将HEAD指向dev则代表当前分支为dev。

> $ git checkout -b dev

切换到一个新分支 'dev'

上面的命令分解为两条命令即:

> $ git branch dev1

> $ git checkout dev1

切换到分支 'dev1'

**查看当前分支**
> $ git branch
  1. 合并分支
![在dev分支开发](https://img-blog.csdnimg.cn/img_convert/4e9aaf288dd7ec97d58823c9ebea20df.png)

在dev分支上进行开发,commit后dev指向新节点,master并不变

![dev开发完毕切换为master](https://img-blog.csdnimg.cn/img_convert/de6aa74ad25d22bec846c00affa15591.png)

dev开发完毕切换为master

> git checkout master

![把dev分支的工作成果合并到master分支上](https://img-blog.csdnimg.cn/img_convert/6294e77b10315b6acbfa45b73f8f21c2.png)

假如我们在dev上的工作完成了,就可以把dev合并到master上。直接把master指向dev的当前提交,就完成了合并:

> $ git merge dev

git merge命令用于合并指定分支到当前分支。

![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/c903653f891120d16fcddaa1d377fbb3.png)

如果将dev删除则又恢复只有master

> $ git branch -d dev

3.解决冲突

假设现在存在master和dev两个分支。dev对readme.txt进行修改后commit。master同时也修改了readme.txt。在dev完成修改需要与master合并的时候出现了conflict。

> $ git merge dev

> 自动合并 readme.txt

冲突(内容):合并冲突于 readme.txt
自动合并失败,修正冲突然后提交修正的结果

**手动修改master后继续commit便可以,dev则可以删除。因为merge的时候dev的内容以及合并到了master中,修改master后只需提交master即可。**

> $ git branch -d feature1
注意事项:
  • git分支没有主次之分,master叫主分支其实和别的分支完全一样
知识记录:
  1. git status查看哪些文件被修改过
  2. git diff可以查看修改内容
  3. HEAD指向的版本就是当前版本,上一个版本就是HEAD,上上一个版本就是HEAD^,往上100个版HEAD~10
  4. 用git log可以查看提交历史,以便确定要回退到哪个版本
  5. git reflog查看命令历史,以便确定要回到未来的哪个版本
  6. git reset --hard commit_id 用来切换版本
  7. git checkout – file 接丢弃工作区的修改时,将版本库的文件直接取出来,本质就是用版本库中的文件替换工作区的文件
  8. git reset HEAD file 将暂存区的文件丢弃,然后可以进行 git checkout – file的操作,即可以撤销add操作后的修改
  9. git rm用于删除一个文件,与git add一样将此更新到暂存区,都需要进行git commit的操作,将暂存区合并至版本库
  10. 查看分支:git branch
  11. 创建分支:git branch
  12. 切换分支:git checkout
  13. 创建+切换分支:git checkout -b
  14. 根据远程分支创建: git checkout -b eg: git checkout -b hotfix/J001 remotes/origin/hotfix/J001
  15. 合并某分支到当前分支:git merge
  16. 删除分支:git branch -d
  17. git remote add origin git@server-name:path/repo-name.git:关联一个远程库
  18. git push -u origin master 关联后,使用命令第一次推送master分支的所有内容
  19. git push origin master 每次本地提交后,只要有必要,就可以使用命令推送最新修改
  20. Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
  21. git log --graph --pretty=oneline --abbrev-commit 可以看到分支合并图
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值