git 常用命令

这里说下,工作了一段时间,常用的一些命令,这里不打算从暂存区之类最基本的说起,直接上实战,干货。

注:我这里是在扣钉上分别创建了两个账号来模拟公司团队开发git日常操作。这里假设你已经正确安装了git,并且有权限克隆团队代码。至于如何安装及git基本概念,这里不打算赘述,请参考廖雪峰老师博客:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000

首先第一步是克隆,对,一般团队技术开发成员都是克隆现有代码。

克隆的命令是:git clone 远程仓库地址

例如我这里是:git clone https://git.coding.net/cjdxReferee/git_test.git

出现下图的原因是没有自报家门,git 不知道你是谁,OK,我们先告诉git 我们是xx。

 

 

填写了用户名和密码后,会自动拉远程代码到本地:

 

 

基本操作 

git status 可以查看状态

git status 告诉我们在master 分支上,1.php 被修改了,并且告诉我们可以使用git add <file> 来更新,git checkout -- <file> 来忽略工作区改变。

这里先说下提交:

    

上面是一次完整的git 操作 - 将工作区修改添加到暂存区,将暂存区内容提交到当前分支,然后推送到远程分支这样一次完整操作。在上面的操作中git add 后面添加了具体的文件名,当一次修改过多时,可以使用统配符.(点),来一次性添加到暂存区。

在上面的例子中,Untracked file 表示从未被提交过,未被跟踪。

ok,上面是提交,当我们发现有部分内容操作错误,不想要修改的时候,可以这样做:

先看下修改前:

修改后:

假设不想要刚才的修改——想要恢复到上次修改前内容,那么使用可以下面的命令:

git checkout -- file 

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   1.php

no changes added to commit (use "git add" and/or "git commit -a")

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (master)
$ git checkout -- 1.php

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (master)

注:git checkout -- file  , -- 和 file 之间有个空格,如果忽略了空格,会报错。

然后再看下,git checkout -- 1.php 之后,1.php 文件内容的变化。

可以发现,修改被还原了。

可通过git log 命令来查看提交日志,

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (master)
$ git log
commit 3ef247dd289ba48ee76c8156d43dbda99e8c659d (HEAD -> master, origin/master, origin/HEAD)
Author: cjdxReferee <guoping_zhang@sfabric.com>
Date:   Sat Nov 3 13:51:27 2018 +0800

    add multi file which a time

commit ad1a715721c569fd467462cd2656ffa5b24a73ab
Author: cjdxReferee <guoping_zhang@sfabric.com>
Date:   Sat Nov 3 13:29:58 2018 +0800

    second commit

commit 1f9235bb2f8b101a4256938c3d33bf400b849afb
Author: cjdxReferee <guoping_zhang@sfabric.com>
Date:   Sat Nov 3 13:16:44 2018 +0800

    modified php file

commit 7ec55a4bbe8f5a1ad4f6ce34fb52869e87054bd4
Author: cjdxReferee <guoping_zhang@sfabric.com>
Date:   Sat Nov 3 13:15:30 2018 +0800

    modified php file

commit 5805b22675d1c22640aa20015e8c7b124190bfdb
Author: cjdxReferee <guoping_zhang@sfabric.com>
Date:   Sat Nov 3 13:11:30 2018 +0800

    first commit

commit 0725a1a76254cd97f2115f9cd5f882535efd2f08
Author: cjdxReferee <guoping_zhang@sfabric.com>
Date:   Fri Nov 2 22:53:07 2018 +0800

    Initial commit

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (master)

也可在 coding.net 项目动态上查看到:

 有时候需要删除已添加到版本库中的文件,可以使用git rm file_name 命令:

 

在上面的操作中我们使用到了push 命令把本地提交推送到远程库,有时候我们本地代码并不一最新的,所以经常需要把远程库代码pull 到本地,并合并。

这里我使用另外一个账号,修改了文件并push 到了远程库。

 

我们在cjdxReferee 这个账号下,把远程库最新提交更新到本地。

当远程库分支版本比我们本地还要新时,进行push 操作前需要pull 一下,把最新版本拉到本地再进行push。 

 

 这里建议在每次push 前都pull 操作一下。

 上面操作,往往比较简单,但实际团队协作过程中多人修改同一处问题,以至于发生冲突:

 

 遇到这种情况,就是因为你和你的小伙伴修改了同一处,pull 到你本地merge 失败,你就要和你的小伙伴商量下,怎么处理冲突。

我这里保留两处修改,并提交。

 在另外一个账号下:git pull origin master 操作

 

分支操作

 在团队协作开发中,一般有一个稳定的主分支(一般是master),好几个开发分支,这里就涉及到了分支管理。

创建分支

这里我们创建一个开发分支和一个bug分支

创建分支命令:git branch <branch_name>

查看分支:git branch

*(星号)表示我们当前所在分支,为了保证开发不影响到现有业务的稳定,切换到dev 分支去开发

切换分支:git checkout <branch_name>

我们在本地已经建了两个分支,但是coding.net 上并没有我们所建立了的dev 和 bug 分支,这样我们就需要把本地分支推送到远程分支了。

git push origin local-branch:remote-branch    //推送本地的local-branch(冒号前面的)分支到远程origin的remote-branch  (冒号后面的)分支(没有会自动创建) 

可以看到coding.net上多了一个dev分支

不过一般建立分支的操作是在远程上进行操作的,本地直接拉下来。

上面我们创建分支并且切换使用了两个操作,分两步进行,其实 ,还可以一步到位的:

创建+切换分支:git checkout -b <branch_name>

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (dev)
$ git checkout -b v1.1
Switched to a new branch 'v1.1'

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (v1.1)
refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (v1.1)
$ ls
1.php  doatexit.c  init.c  iocache.c  README.md  test.c

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (v1.1)
$ vim 1.php

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (v1.1)
$ cat 1.php
<?php
echo "hello,world";
echo "show conflict example demo";

echo "test of git";
echo "test of git";

echo "this is edit of v1.1 branch ";

echo "php is the best proram language on the world";

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (v1.1)

 

 在上面的案例中,本地有v1.1 这个分支,但是远程没有创建 v1.1 这个分支本地也没有推送到远程,不过在将本地修改push (推送)到远程时,发现 git 自动创建了一个分支 (new branch v1.1)。

当我们在开发分支或者其它分支开发完毕后,就需要把当前分支修改合并到主分支。

 先切换到master分支,然后再进行合并操作:

合并某分支到当前分支:git merge <branch_name>

 

 

一般代码合并完成后,会进行删除分支操作:

删除分支:git branch -d <branch_name>

refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (master)
$ git branch -d v1.1
Deleted branch v1.1 (was 333e011).
refer@DESKTOP-1QO9J8E MINGW64 /d/test/git_1/git_test (master)
$ git branch
  bug
  dev
* master

 可以发现,本地删除了v1.1 这个分支

但是coding.net上 v1.1 这个分支还是存在的,要在远程上删除该分支,跟创建分支一样,同样两种操作,这里说下本地删除远程分支(远程删除分支过于简单不再赘述)。

到coding.net查看已经删除了 v1.1 这个分支

 

这里虽然说了在本地创建分支和删除,然后推送到远程,但在实际开发中这样很少做,一般是团队 leader 在远程建分支,然后本地pull 即可。

既然说到了pull ,那再啰嗦下在工作中遇到的一个问题:

我一般在工作中,pull 操作前会明确到具体的某个分支,例如:git pull origin dev ,这样会把远程dev 分支的最新提交更新到本地并进行合并,但要是想获取远程最新分支 ,可以使用git pull 命令。

 参考文章:

     廖雪峰老师文章:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

另这里分享下本人收藏的git 文档(布尔教育版):

   链接:https://pan.baidu.com/s/1l43yUV8nbYOZr6ixVdFuHg  提取码:2n5c 
 

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值