首页 > 学院 > 开发设计 > 正文

Git常用操作命令及举例说明

2019-11-10 18:31:32
字体:
来源:转载
供稿:网友

[ [ [转载] http://blog.csdn.net/techbirds_bao/article/details/9179853

Git 仓库就是那个.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而实现文档的版本控制。.git目录位于工作目录内。 对于任何一个文件,在 Git 内都只有三种状态:已修改(modified),已暂存(staged)和已提交(committed)。

Git的三种状态:

1.Change(Unstaged):你改动了一个,没有调用任何git命令前,就是这种状态。2.Staged暂存区:调用git add或者git commit -a之后,进入Staged状态,表示申明要变动了。3.Committed:Commit,生成新的版本commit号,进入此状态。

常见状态提示:

1.nothing to commit (working directory clean): 所有已跟踪文件在上次提交后都未被更改过2.Untracked files: 未跟踪文件3.Changes to be committed: 已跟踪文件(在添加add命令之后的文件与修改后又添加add命令之后的文件)4.Changes not staged for commit:已跟踪文件的内容发生了变化,但还没有放到暂存区,这样状态的文件即使Commit上去也只是Commit暂存区的版本而不是改文件最新版本

若编辑修改已暂存的文件,后运行git status会出现暂存前后的两个版本(Change和Staged),若此时Commit,则只会同步已暂存(Staged)的那个版本,而不会同步暂存后修改的部分。若要同步暂存后修改的部分,应重新add该文件。

提交时记录的是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。

在 Git 中,HEAD是一个指向你正在工作中的本地分支的指针(将 HEAD 想象为当前分支的别名。)

任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。可以使用git mergetool使用图形工具引导合并解决冲突。

1、 远程仓库相关命令

检出仓库:$ git clone git://github.com/jquery/jquery.git查看远程仓库:$ git remote -v添加远程仓库:$ git remote add [name] [url]删除远程仓库:$ git remote rm [name]修改远程仓库:$ git remote set-url --push[name][newUrl]拉取远程仓库:$ git pull [remoteName] [localBranchName]推送远程仓库:$ git push [remoteName] [localBranchName]

[举例] 1)、 为PD-based-on-pc项目新建一个远程origin仓库

$ git remote add origin git@git.coding.net:Yunpentium/PD-based-on-pc.git

2)、 把本地master分支的内容推送到远程的origin仓库

$ git push origin master

2、分支(branch)操作相关命令

查看本地分支:$ git branch查看远程分支:$ git branch -r创建本地分支:$ git branch [name] //注意新分支创建后不会自动切换为当前分支切换分支:$ git checkout [name]切换分支(到下一个):$ git checkout -创建新分支并立即切换到新分支:$ git checkout -b [name]删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并本地分支push到远程分支(简写):$ git push origin [name] //本地和远程分支名称都是name本地分支push到远程分支(全写):git push origin [localBranch]:[remoteBranch]//上边两个命令会自动创建远程分支删除远程分支:$ git push origin :heads/[name]

[举例] 我从本地master分支创建了一个本地issue5560分支,做了一些修改后,使用git push origin master提交,但是显示的结果却是’Everything up-to-date’。发生问题的原因是git push origin master中,本地master分支默认指向了远程的origin/master 分支,所以这里要使用git push origin issue5560:master 就可以指明是把本地的issue5560推送到远程的origin/master分支了。

如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。

$ git push origin test:master // 提交本地test分支作为远程的master分支 $ git push origin test:test // 提交本地test分支作为远程的test分支

如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。

$ git push origin :test // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心

3、版本(tag)操作相关命令

Git 使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)

查看版本:$ git tag创建版本:$ git tag [name]删除版本:$ git tag -d [name]查看远程版本:$ git tag -r创建远程版本(本地版本push到远程):$ git push origin [name]删除远程版本:$ git push origin :refs/tags/[name]

[举例]

$git tag -a v1.4 -m 'my version 1.4' //新建一个含附注(-a)的标签$git tag v1.5#新建一个轻量级标签$git show v1.1 #查看相应标签的版本信息

4、子模块(submodule)相关操作命令

添加子模块:$ git submodule add [url] [path]

如:$ git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs

初始化子模块:$ git submodule init ----只在首次检出仓库时运行一次就行更新子模块:$ git submodule update ----每次更新或切换分支后都需要运行一下删除子模块:(分4步走哦)1)$ git rm --cached [path] 2) 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉 3) 编辑“.git/config”文件,将子模块的相关配置节点删除掉 4) 手动删除子模块残留的目录 5)忽略一些文件、文件夹不提交在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如targetbin*.db

5、初始化操作

$mkdir folderName #建立名为folderName的文件夹$touch README #创建一个空文件$git init #初始化git仓库,其实是增加了.git隐藏目录,把本地目录变成Git可以管理的仓库$git clone [URL] //复制远程分支到本地目录。还有其它参数选项,下文第8节有讲到$git status #查看状态(一般在commit之前查看当前修改和仓库里面差别多少;git status -s)

6、Add操作(进入Staged状态)

运行了 git add 之后又修改了本地文件,需要重新运行 git add 把最新版本重新暂存起来。

add添加到暂存区的文件,git才会监控它的变化。在Unstaged状态的文件变化并不会在命令行中体现出来。

$ git add octocat.txt //把文件从change->staged状态(修改现有文件也要git add来修改状态)$ git add /home/root/aaa/*#(当前目录下所有的更新)$ git reset HEAD gitTest.txt #取消已add到暂存区的文件(与add执行相反的操作)

7、Commit操作

$git commit -m "Add cute octocat story" //提交到仓库,必须要一个message说明,–m返回提交时的信息(如果不加-m,则会调用默认编辑器供填写提交信息说明)$git commit -a -m 'message' //(加上-a参数,把所有已经跟踪过的文件一次性暂存起来一起提交,这样不用先git add再git commit,跳过git add步骤)$git commit -m 'initial commit'$git add forgotten_file//上面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容.如果提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交

8、git clone 命令

usage: git clone [options] [–] [

]

-v, --verbose be more verbose-q, --quiet be more quiet--PRogress force progress reporting-n, --no-checkout don't create a checkout--bare create a bare repository--mirror create a mirror repository (implies bare)-l, --local to clone from a local repository--no-hardlinks don't use local hardlinks, always copy-s, --shared setup as shared repository--recursive initialize submodules in the clone--recurse-submodules initialize submodules in the clone--template <template-directory> directory from which templates will be used--reference <repo> reference repository-o, --origin <name> use <name> instead of 'origin' to track upstream-b, --branch <branch> checkout <branch> instead of the remote's HEAD-u, --upload-pack <path> path to git-upload-pack on the remote--depth <depth> create a shallow clone of that depth--separate-git-dir <gitdir> separate git dir from working tree-c, --config <key=value> set config inside the new repository

参数挺多,但常用的就几个:

1)、最简单直接的命令

git clone xxx.git

2)、 如果想clone到指定目录

git clone xxx.git "指定目录"

3)、 clone时创建新的分支替代默认Origin HEAD(master)

git clone -b [new_branch_name] xxx.git

4)、 clone 远程分支

  git clone 命令默认的只会建立master分支,如果你想clone指定的某一远程分支(如:dev)的话,可以如下:

 A. 查看所有分支(包括隐藏的) git branch -a 显示所有分支,如:    

master remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/master

 B. 在本地新建同名的(“dev”)分支,并切换到该分支

git checkout -t origin/dev 该命令等同于:git checkout -b dev origin/dev

9、查看差异

如果已暂存了所有修改过的文件,后运行git diff会什么都没有(因为该命令显示的是当前文件与暂存文件之间的差异)

$git diff//查看文件被修改之后还没有暂存起来的变化内容,显示的是与上次暂存文件的差异$git diff test //显示当前目录和另一个叫'test'分支的差别$git diff --cached //查看已经暂存起来的文件和上次提交时的快照之间的差异$git diff --staged //同上
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表