配置管理工具GIT之常用命令整理

      本文假定读者对GIT有一定的基础,仅供大家在工作中碰到问题时参考所用。

Git简介

重要的术语

术语

定义

仓库

Repository

一个仓库包括了所有的版本信息、所有的分支和标记信息。

Git中仓库的每份拷贝都是完整的。仓库让你可以从中取得你的工作副本。

分支

Branches

一个分支意味着一个独立的、拥有自己历史信息的代码线(code line)。你可以从已有的代码中生成一个新的分支

,这个分支与剩余的分支完全独立。默认的分支往往是叫master。用户可以选择一个分支,选择一个分支叫做checkout.

标记

Tags

一个标记指的是某个分支某个特定时间点的状态。通过标记,可以很方便的切换到标记时的状态,例如2009125号在testing分支上的代码状态。

提交

Commit

提交代码后,仓库会创建一个新的版本。这个版本可以在后续被重新获得。每次提交都包括作者和提交者,作者和提交者可以是不同的人。

URL

URl用来标识一个仓库的位置

修订

Revision

用来表示代码的一个版本状态。Git通过用SHA1 hash算法表示的id来标识不同的版本。每一个 SHA1 id都是160位长,16进制标识的字符串.最新的版本可以通过HEAD来获取.之前的版本可以通过"HEAD~1"来获取,以此类推。

补丁

指的是一个包含对源代码进行修改的文本文件。你可以将这个文件发送给某人,然后他就可以应用这个补丁到他的本地仓库。

索引

Git 需要将代码的变化显示的与下一次提交进行关联。举个例子,如果你对一个文件继续了修改,然后想将这些修改提交到下一次提交中,你必须将这个文件提交到索引中,通过git add file命令。这样索引可以保存所有变化的快照。

新增的文件总是要显示的添加到索引中来。对于那些之前已经提交过的文件,可以在commit命令中使用-a 选项达到提交到索引的目的。

HEAD指针

Git 是如何知道你当前在哪个分支上工作的呢?它保存着一个名为 HEAD 的特别指针。在 Git 中,它是一个指向你正在工作中的本地分支的指针(当前分支的别名)。

命令大全

配置部分

配置用户名和Email

git config --global user.name "Example Surname"

git config --global user.email "[email protected]"

# Set default so that all changes are always pushed to the repository

git config --global push.default "matching"

获取Git配置信息

git config --list

配置终端高亮

git config --global color.status auto

git config --global color.branch auto

忽略特定的文件

可以配置Git忽略特定的文件或者是文件夹。这些配置都放在.gitignore文件中。这个文件可以存在于不同的文件夹中,可以包含不同的文件匹配模式。为了让Git忽略bin文件夹,在主目录下放置.gitignore文件,其中内容为bin

同时Git也提供了全局的配置,core.excludesfile

使用.gitkeep来追踪空的文件夹

Git会忽略空的文件夹。如果你想版本控制包括空文件夹,根据惯例会在空文件夹下放置.gitkeep文件。其实对文件名没有特定的要求。一旦一个空文件夹下有文件后,这个文件夹就会在版本控制范围内。

新增部分

创建仓库

git init

添加文件

git add .

提交更改

git commit -m "Initial commit"

git commit -a -m "These are new changes" #将未添加到索引的文件也提交

git add . && git commit -m "message"

添加远端仓库

git remote add origin ../remote-repository.git

提交到远端

git push origin master

创建一个标记

git tag version1.6 -m 'version 1.6'

创建一个新的分支

git branch testing

git branch <branchname> [<start_point>]

 

#创建新的分支,但是不会切换到新建的分支上,如果没有指定start_point,默认#从HEAD指向的提交创建分支。

git push origin develop    #提交分支到远端

切换分支

git checkout testing

git checkout -b myfeature develop    #创建及切换分支

git checkout -b newbranch  [<start_point>]  #b代表branch的意思,newbranch 是新分支的名称,如果没有指定提交点(start_point),默认从HEAD指向的提交创建分支。

合并两个不同分支的结果

#Merge通过所谓的三路合并来完成。分别来自两个分支的最新commit和两个分支的最新公共commit

git merge testing

创建补丁

git branch mybranch

git checkout mybranch

touch test05

echo "New content for test01" >test01

git add .

git commit -a -m "First commit in the branch"

# Create a patch --> git format-patch master

git format-patch origin/master

# This created patch 0001-First-commit-in-the-branch.patch

git checkout master

git apply 0001-First-commit-in-the-branch.patch

git add .

git commit -a -m "Applied patch"

rm 0001-First-commit-in-the-branch.patch

查看部分

查看修改记录(未提交)

git log

查看提交记录

git diff

查看哪些文件做过变动(未提交)

git status

图形查看变更历史

gitk --all

显示已有的远端仓库

git remote

克隆仓库

git clone [email protected]:vogella/gitbook.git

git clone origine

拉取(Pull)更改

git pull origin master

查看文件内容

less test01.txt

列出所有的标记

Git tag

列出所有本地分支,当前所在的分支前带有*

git branch

看远端仓库的分支

git branch -a

修改部分

更正提交的信息

git commit --amend -m "More changes - now correct"

还原更改(已加入索引)

#如果在你的工作副本中,你创建了不想被提交的文件,你可以丢弃它。

git clean -n

git clean –f    # Now delete

提取老版本的代码(把commit的内容复制到index和工作副本中)

git checkout commit_id       #通过commit IDgit log命令可以查看commit _id

git revert commit_id

还原所有未加入到索引的更改

#如果你还未把更改加入到索引中,你也可以直接还原所有的更改

#即使你删除了一个未添加到索引和提交的文件,你也可以还原出这个文件

git checkout test01.txt    # checkout后如果没有commit id号,就是从index中拷贝数据到工作副本

还原HEAD所指commit

#复制HEAD所指committest01文件到index

git reset HEAD test01

#复制indextest01到工作副本中

git checkout test01

还原文件夹

如果你删除了文件夹且尚未提交,可以通过以下命令来恢复这个文件夹。译者注:即使已经提交,也可以还原

git checkout HEAD -- your_dir_to_restore

恢复到一个标记

git checkout <tag_name>

推送(push)一个分支到远端仓库

git push origin testing

git push origin testing testing

git push origin testing:testing

解决合并冲突

git mergetool

合并多个commit为一个

git rebase -i HEAD~7

Rebasing多个分支

#使用mergerebase,最后的源代码是一样的,但是使用rebase产生的commit历史更加的少,而且历史记录看上去更加的线性

git branch testing

git checkout testing

echo "This will be rebased to master" > test01

git commit -a -m "New feature in branch"

git checkout master

git rebase master

删除部分

删除文件

git commit -a -m "removed"

git add -A . && git commit -m "removed"

删除索引中文件(取消删除动作)。

如果你已经添加一个文件到索引中,但是未提交。可以通过git reset file 命令将这个文件从索引中删除

git reset incorrect.txt

删除分支

git branch -d testing

git push origin :branch-name  #把一个空分支push到server上,相当于删除该分支(冒号前面的空格不能少)。

 

删除远端仓库引用    git remote remove origin

管理部分

谁创建了或者是修改了这个文件

git blame filename

以上上个commit信息为起点,创建一条新的分支

git checkout -b mybranch master~1

 附录:

1、github生成非对称密钥对命令:ssh-keygen -t rsa -C  [email protected] 

 

猜你喜欢

转载自seandeng888.iteye.com/blog/2113880