git用法

1 篇文章 0 订阅

在查找资料的时候,看见的,感觉不错,为以后看起来方便就粘过来了。。吐舌头


 1. Git概念 


1.1. Git库中由三部分组成 
       Git 仓库就是那个.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而实现文档的版本控制。.git目录位于工作目录内。 
1) 工作目录:用户本地的目录; 
2) Index(索引):将工作目录下所有文件(包含子目录)生成快照,存放到一个临时的存储区域,Git 称该区域为索引。 
3) 仓库:将索引通过commit命令提交至仓库中,每一次提交都意味着版本在进行一次更新。 


1.2. 使用Git时的初始化事项 
   Git初始化配置 
1) 配置使用git仓库的人员姓名 
       git config --global user.name "Your Name Comes Here" 
2) 配置使用git仓库的人员email 
       git config --global user.email you@yourdomain.example.com 


2. Git help 
       Git help 获取git基本命令 
(如果要知道某个特定命令的使用方法,例如:使用Git help clone,来获取git clone的使用方法)

3. Git本地操作基本命令 


3.1. Git init 
或者使用git init-db。 
创建一个空的Git库。在当前目录中产生一个.git 的子目录。以后,所有的文件变化信息都会保存到这个目录下,而不像CVS那样,会在每个目录和子目录下都创建一个CVS目录。 
在.git目录下有一个config文件,可以修改其中的配置信息。 


3.2. Git add 
将当前工作目录中更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步。 
可以递归添加,即如果后面跟的是一个目录作为参数,则会递归添加整个目录中的所有子目录和文件。例如: 
       git add dir1 ( 添加dir1这个目录,目录下的所有文件都被加入 ) 
       Git add f1 f2 ( 添加f1,f2文件) 
       git add .      ( 添加当前目录下的所有文件和子目录 )

 
3.3. Git rm 
从当前的工作目录中和索引中删除文件。 
可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件。例如: 
       git rm –r * (进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录) 
       git rm f1    (删除文件f1,包含本地目录和index中的此文件记录) 
       git rm --ached f1 (删除文件f1,不会删除本地目录文件,只删除index中的文件记录;将已经git add的文件remove到cache中,这样commit的时候不会提交这个文件, 适用于一下子添加了很多文件, 却又想排除其中个别几个文件的情况.) 


3.4. Git commit 
提交当前工作目录的修改内容。 
直接调用git commit命令,会提示填写注释。

通过如下方式在命令行就填写提交注释:git commit -m "Initial commit of gittutor reposistory"。 注意,git的提交注释必须不能为空,否则就会提交失败。 每一次提交,git就会为全局代码建立一个唯一的commit标识代码。


git reset用户可以通过git reset命令恢复到任意一次提交时的代码。 

git  reset --hard[ ]  commit 
       
3.5. Git status 
查看版本库的状态。可以得知哪些文件发生了变化,哪些文件还没有添加到git库中等等。 建议每次commit前都要通过该命令确认库状态。 
最常见的误操作是, 修改了一个文件, 没有调用git add通知git库该文件已经发生了变化就直接调用commit操作, 从而导致该文件并没有真正的提交。这时如果开发者以为已经提交了该文件,就继续修改甚至删除这个文件,那么修改的内容就没有通过版本管理起来。如果每次在 提交前,使用git status查看一下,就可以发现这种错误。因此,如果调用了git status命令,一定要格外注意那些提示为 “Changed but not updated:”的文件。 这些文件都是与上次commit相比发生了变化,但是却没有通过git add标识的文件。

 
3.6. Git log 
查看历史日志,包含每次的版本变化。每次版本变化对应一个commit id。 
       Git log -1 

-1的意思是只显示一个commit,如果想显示5个,就-5。不指定的话,git log会从该commit一直往后显示


3.7.  git  show  

显示当前状态下,所发生的变化

git  show commit 显示标志代码commit状态下与上一次比较发生的变化

   

3.8. Git merge 
把服务器上下载下来的代码和本地代码合并。或者进行分支合并。 
例如:当前在master分支上,若想将分支dev上的合并到master上,则git merge dev 


3.9. Git diff 
把本地的代码和index中的代码进行比较,或者是把index中的代码和本地仓库中的代码进行比较。 
1) Git diff 
比较工作目录和Index中的代码。 
2) Git diff - - cached 
比较index和本地仓库中的代码9。

3.10. Git checkout 


3.10.1. 切换到分支 
1) 创建一个新分支,并切换到该分支上 
       Git checkout –b 新分支名 
2)切换到某个已经建立的本地分支local_branch 
       Git checkout local_branch 
(使用cat .git/HEAD后,显示refs:refs/heads/ local_branch) 
3) 切换到服务器上的某个分支remote_branch 
       Git checkout remote_branch 
(远程分支remote_branch可以通过 git branch –r 列出) 
4) 切换到某个commit id 
       Git checkout commit_id 
(使用cat .git/HEAD后,显示commit_id) 
5) 切换到某个tag 
       Git checkout tag

 3.10.2. 用已有分支初始化新分支 
执行下面的命令,在切换到某个已经建立的local branch或者某个remote branch或者某个commit id 或者某个tag的同时,创建新分支new_branch,并且挂到这个新分支上。 
1) 切换到某个已经建立的本地分支local_branch,并且使用此分支初始化一个新分支new_branch。 
       git checkout –b new_branch local_branch 
2) 切换到某个远程分支remote_branch,并且用此分支初始化一个新分支new_branch。 
       Git checkout –b new_branch remote_branch 
3) 切换到某个commit id,并建立新分支new_branch 
       Git checkout –b new_branch commit_id 
4) 切换到某个tag,并建立新分支new_branch 
       Git checkout –b new_branch tag 


3.10.3. 还原代码 
例如 “git checkout app/model/user.rb” 就会将user.rb文件从上一个已提交的版本中更新回来,未提交的工作目录中的内容全部会被覆盖。


3.11. Git-ls-files 
查看当前的git库中有那些文件。 

 Git mv 
重命名一个文件、目录或者链接。 
例如:Git mv helloworld.c helloworld1.c (把文件helloworld.c 重命名为 helloworld1.c)


3.12. Git branch


3.12.1. 查看分支 
       git branch 列出本地git库中的所有分支。在列出的分支中,若分支名前有*,则表示此分支为当前分支。 
       git branch –r 列出服务器git库的所有分支。 
(可以继续使用命令 “ git checkout -b 本地分支名 服务器分支名”来获取服务器上某个分支的代码文件)。 

3.12.2. 查看当前在哪个分支上 
       cat .git/HEAD 

3.12.3. 创建一个分支 
1) git branch 分支名 
虽然创建了分支,但是不会将当前工作分支切换到新创建的分支上,因此,还需要命令“git checkout 分支名” 来切换, 
2) git checout –b 分支名 
不但创建了分支,还将当前工作分支切换到了该分支上。 

3.12.4. 切换到某个分支:git checkout 分支名 
切换到主分支:git checkout master 

3.12.5. 删除分支 
       git branch –D 分支名 
注意: 删除后,发生在该分支的所有变化都无法恢复。强制删除此分支。 

3.12.6. 比较两个分支上的文件的区别 
       git diff master 分支名 (比较主分支和另一个分支的区别) 

3.12.7. 查看分支历史 
       git-show-branch (查看当前分支的提交注释及信息) 
       git-show-branch -all(查看所有分支的提交注释及信息)

3.12.8. 查看当前分支的操作记录 
       git whatchanged 

3.12.9. 合并分支 
法一: 
       git merge “注释” 合并的目标分支 合并的来源分支 
如果合并有冲突,git会有提示。 
例如:git checkout master   (切换到master分支) 
       git merge HEAD dev~2 (合并master分支和dev~2分支)或者:git merge master dev~2 
法二: 
       git pull 合并的目标分支 合并的来源分支 
例如: git checkout master (切换到master分支) 
       git pull . dev~2(合并当前分支和dev~2分支) 


3.13. Git rebase 
一般在将服务器最新内容合并到本地时使用,


3.14. Git reset

   git reset的概念比较复杂。它的命令形式:git reset [--mixed | --soft | --hard] [<commit-ish>] 
命令的选项: 
       --mixed 这个是默认的选项。如git reset [--mixed] dev^(dev^的定义可以参见2.6.5)。它的作用仅是重置分支状态到dev1^, 但是却不改变任何工作文件的内容。即,从dev1^到dev1的所有文件变化都保留了,但是dev1^到dev1之间的所有commit日志都被清除了, 而且,发生变化的文件内容也没有通过git add标识,如果您要重新commit,还需要对变化的文件做一次git add。 这样,commit后,就得到了一份非常干净的提交记录。 (回退了index和仓库中的内容) 
       --soft相当于做了git reset –mixed,后,又对变化的文件做了git add。如果用了该选项, 就可以直接commit了。(回退了仓库中的内容) 
       --hard这个命令就会导致所有信息的回退, 包括文件内容。 一般只有在重置废弃代码时,才用它。 执行后,文件内容也无法恢复回来了。(回退了工作目录、index和仓库中的内容)

3.15. Git revert 
还原某次对版本的修改,例如:git revert commit_id (其中commit_id为commit代码时生成的一个唯一表示的字符串) 
例如:(3.6中)git revert dfb02e6e4f2f7b573337763e5c0013802e392818 (执行此操作,则还原上一次commit的操作) 

3.16. Git config 
利用这个命令可以新增、更改Git的各种设置,例如 “git config branch.master.remote origin” 就将master的远程版本库设置为别名叫做origin版本库。 

3.17. Git show 
显示对象的不同类型。 

3.18. Git tag 
创建、列出、删除或者验证一个标签对象(使用GPG签名的)。


4. Git服务器操作命令(与服务器交互)

 
4.1. Git clone 
取出服务器的仓库的代码到本地建立的目录中(与服务器交互) 
通过git clone获取远端git库后,.git/config中的开发者信息不会被一起clone过来。仍然需要为本地库的.git/config文件添加开发者信息。此外,开发者还需要自己添加   . gitignore文件。 
通过git clone获取的远端git库,只包含了远端git库的当前工作分支。如果想获取其它分支信息,需要使用 “git branch –r” 来查看, 如果需要将远程的其它分支代码也获取过来,可以使用命令 “ git checkout -b 本地分支名 远程分支名”,其中,远程分支名为 “git branch –r” 所列出的分支名, 一般是诸如“origin/分支名”的样子。如果本地分支名已经存在, 则不需要“-b”参数。

4.2. Git pull 
从服务器的仓库中获取代码,和本地代码合并。用法如下: 
git pull username@ipaddr:远端repository名远端分支名 本地分支名。这条命令将从远端git库的远端分支名获取到本地git库的一个本地分支中。其中,如果不写本地分支名,则默认pull到本地当前分支。

4.3. Git push 
将本地commit的代码更新到远程版本库中,例如 “git push origin”就会将本地的代码更新到名为orgin的远程版本库中。 
       git push和git pull正好想反,是将本地某个分支的内容提交到远端某个分支上。用法: git pushusername@ipaddr:远端repository名本地分支名 远端分支名。这条命令将本地git库的一个本地分支push到远端git库的远端分支名中。


4.4. Git fetch 
从服务器的仓库中下载代码。(与服务器交互,从服务器上下载最新代码) 
相当于从远程获取最新版本到本地,不会自动merge,比Git pull更安全些。 
使用此方法来获取服务器上的更新。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值