这里说下,工作了一段时间,常用的一些命令,这里不打算从暂存区之类最基本的说起,直接上实战,干货。
注:我这里是在扣钉上分别创建了两个账号来模拟公司团队开发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
这里先说下提交:
上面是一次完整的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 ..." to update what will be committed)
(use "git checkout -- ..." 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
Date: Sat Nov 3 13:51:27 2018 +0800
add multi file which a time
commit ad1a715721c569fd467462cd2656ffa5b24a73ab
Author: cjdxReferee
Date: Sat Nov 3 13:29:58 2018 +0800
second commit
commit 1f9235bb2f8b101a4256938c3d33bf400b849afb
Author: cjdxReferee
Date: Sat Nov 3 13:16:44 2018 +0800
modified php file
commit 7ec55a4bbe8f5a1ad4f6ce34fb52869e87054bd4
Author: cjdxReferee
Date: Sat Nov 3 13:15:30 2018 +0800
modified php file
commit 5805b22675d1c22640aa20015e8c7b124190bfdb
Author: cjdxReferee
Date: Sat Nov 3 13:11:30 2018 +0800
first commit
commit 0725a1a76254cd97f2115f9cd5f882535efd2f08
Author: cjdxReferee
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
查看分支:git branch
*(星号)表示我们当前所在分支,为了保证开发不影响到现有业务的稳定,切换到dev 分支去开发
切换分支:git checkout
我们在本地已经建了两个分支,但是coding.net 上并没有我们所建立了的dev 和 bug 分支,这样我们就需要把本地分支推送到远程分支了。
git push origin local-branch:remote-branch //推送本地的local-branch(冒号前面的)分支到远程origin的remote-branch (冒号后面的)分支(没有会自动创建)
可以看到coding.net上多了一个dev分支
不过一般建立分支的操作是在远程上进行操作的,本地直接拉下来。
上面我们创建分支并且切换使用了两个操作,分两步进行,其实 ,还可以一步到位的:
创建+切换分支:git checkout -b
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
在上面的案例中,本地有v1.1 这个分支,但是远程没有创建 v1.1 这个分支本地也没有推送到远程,不过在将本地修改push (推送)到远程时,发现 git 自动创建了一个分支 (new branch v1.1)。
当我们在开发分支或者其它分支开发完毕后,就需要把当前分支修改合并到主分支。
先切换到master分支,然后再进行合并操作:
合并某分支到当前分支:git merge
一般代码合并完成后,会进行删除分支操作:
删除分支:git branch -d
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