Git基础操作

来源:互联网 发布:nginx 网络模型 编辑:程序博客网 时间:2024/05/28 09:32

目录

1.初始化指令:git init

2.跟踪文件指令:git add 文件名(也是将文件放到暂存区指令)

3.提交指令:git commit –m “说明信息”。给git commit –a,可以跳过使用暂存区域,这样就会自动把所有已经跟踪的文件暂存起来一并提交,从而跳过git add步骤。如:git commit –a –m ‘信息’

4.克隆指令:git clone url的路径自定义文件名(自定义文件名可以省略)

5.若要从远程仓库更新本机代码,可以使用gitfetch 和git pull

6.查看状态指令:git status

7.编辑指令:vim 文件名

8.进入要上传的github网站的仓库指令:git remote add origin 你的github仓库网址

9.上传到github或者服务器指令:git push origin master 

10.查看未暂存的文件的更新指令:git diff。查看暂存起来的文件和上次提交之间的差别指令:git diff –cached

11.删除文件指令:git rm 文件名(直接在磁盘中删除)。git rm --cached (删除所有跟踪的文件缓存)。git rm --cached 文件名(删除指定文件的缓存,在git仓库中删除,但是依然存在在工作目录中)

12.查看日志指令:git log

13.git创建分支命令:git branch 分支名。

14.切换到分支命令:git checkout 分支名

15.创建一个分支branch_name并切换到该分支:git checkout -b 分支名

16.合并分支指令:git merge 分支名

17.删除分支指令:git branch –d 分支名(-d和-D有区别)

18.本机没有的分支获得服务器有的分支,可以使用指令:git checkout 服务器名/分支名 -b 分支名

19.回退到某一版本,git reset --soft 2版的md5


详细例子操作

一. 取得项目的Git仓库

方法一:在现存的目录下,导入所有文件创建新的Git仓库

1.右键一个工程,选择Git Bash Here



2.初始化指令:git init


工程里多了个.git的文件夹

3.添加跟踪文件指令:git add文件名(也是将文件放到暂存区指令)

git add.

这里的“.”代表添加整个当前目录


也可以使用 git add *.cpp 等添加特定的文件


4.提交指令:git commit –m ‘说明信息‘

git commit –m ‘initial project version’


方法2:从已有的仓库克隆出一个新的镜像

1.克隆指令:gitclone url的路径自定义文件名(自定义文件名可以省略)

在github网上找到的源码,点击如下按钮复制url



2.输入指令:

git clone git@github.com:waterbinbin/inversematrix.git

执行完后下载好工程


若要从远程仓库更新本机代码,可以使用git fetchgit pull

git fetch origin mastergit merge git merge origin/master
或者直接使用

git pull origin master


二. 检查当前文件状态

1.查看状态指令:git status

从刚才“一”的方法1初始化的git仓库中,输入指令:git status,用于显示所有已跟踪和未跟踪的文件



说明没有跟踪文件以及没有任务文件在上次提交后更改过,也没有未跟踪的新文件。


2. 编辑指令:vim 文件名

vim /detectmemery/detectmemery.cpp

输入:i 插入内容

编辑完后按esc,然后输入“:wq”

vim中以#开头的都是注释

在vim控制台下,编辑完以后按Esc回到末行模式,再输入:w写入修改文件,输入:q退出vim回到bash

3.添加一个readme.txt,修改其中一个文件,查看状态


然后可以使用git add 来增加readme.txt的跟踪,使用git commit提交,操作如下:

git add ./detectmemery/readme.txt

git commit

可以输入#添加说明

Esc+:wq

git status

这里修改了cpp文件,但是commit之后还是提示这个文件修改了,原因是要重新git add 将跟踪的文件再次放到暂存区,再提交。之前修改后没有git add,文件时为暂存的。

git add ./detectmemery/detectmemery.cppgit commitgit status


 三.提交本地代码到GitHub网站上

1.打开自己的github网址,点击New repository



2. 填写项目的名字等信息,然后点Create repository



3.回到git bash界面

因为之前在“二”已经执行过git add 和git commit,因此不需要在如何,如果是将一个新的项目提交到网站,则:

(1)添加工程跟踪

git add .


(2)提交代码

git commit


(3)进入要上传的github网站的仓库指令:

git remote add origin 你的github仓库网址

这里第2步,点击了Create repository后,跳转的页面,点击如下按钮复制仓库的url。选择HTTPS和SSH都一样

git remote add origin https://github.com/waterbinbin/detectmemery.git


(4)上传到github或者服务器指令:git push origin master

git push origin master


(5)输入账号密码


(6)git中也要输入自己以前在git设置的gobalusername和密码



(7)回到github网站查看上传结果


上传成功。


四.查看已暂存和为暂存的文件的更新指令

1.查看未暂存的文件的更新指令:git diff

再次修改readme.txt,但是不add暂存,使用git diff



2. 查看暂存起来的文件和上次提交之间的差别指令:git diff –cached

先暂存:

git add ./detectmemery/readme.txt
查看:

git diff –cached


3.上传

git  commit
git commit –a,可以跳过使用暂存区域,这样就会自动把所有已经跟踪的文件暂存起来一并提交,从而跳过git add步骤。


五.删除文件

删除文件指令:git rm文件名(直接在磁盘中删除)

git rm --cached :删除所有跟踪的文件缓存

git rm --cached 文件名:删除指定文件的缓存(在git仓库中删除,但是依然存在在工作目录中)


git rm --cached ./\*.pdf用来删除项目根目录下所有pdf文件的缓存

git rm \*~,会递归删除当前目录及其子目录中所有~ 结尾的文件。


六.查看日志

查看日志指令:git log



七. 忽略文件

1.在需要忽略文件的目录下添加.gitignore文件,本例子在如下目录添加忽略文件



2.自己定义的.gitnore文件的内容如下

可以通过指令cat 文件名 查看文件内容

cat ./ detectmemery/.gitignore


3.由于之前已经提交过忽略文件包含的文件,因此规则没有生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。

  那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .git add .git commit -m 'update .gitignore'

4.git ignore匹配规则

# 此为注释 – 将被 Git 忽略

*.a      # 忽略所有 .a 结尾的文件

!lib.a    # 但 lib.a 除外

/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括subdir/TODO

build/    # 忽略 build/ 目录下的所有文件

doc/*.txt  # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt


5.更详细的全局忽略可以参考如下博客:

http://blog.csdn.net/benkaoya/article/details/7932370


八.Git分支

1.git创建分支命令:git branch分支名

git branch testdetectmemery


2.切换到分支命令:git checkout 分支名
git checkout testdetectmemery


3.再提交代码

在分支里添加了代码。

git add .git commit 


4.创建一个分支branch_name并切换到该分支:git checkout -b分支名


5.回到master分支,合并分支的指令:git merge分支名

git merge testdetectmemery


6.删除分支

删除分支指令:git branch –d 分支名

git branch –d testdetectmemery


7.github上的一个项目有master主干,和testdetect分支。由于本机只有这个项目的master主干,使得本机也获得github这个testdetect分支,可以使用指令:gitcheckout服务器名/分支名-b分支名

git checkout origin/testdetect -b testdetect


8.推送本地分支到服务器
git push (远程仓库名) (分支名)


九.回退到某一个版本

  git log查看历史版本的md5串码,再git reset --soft [md5串码],回退以后,历史记录没有了,但新的文件还在;

  如果用git reset --hard [md5串码],回退以后,新的文件也被删掉,完全回复历史版本。

举例:

  比如提交了1、2、3三个版本,然后突然想回到2版修改些东西,但又不影响目前3版的进度,可以用命令

git reset --soft 2版的md5

  回到2版未提交的状态,然后用命令

git checkout -b newbranch

  新建一个分支,提交一次以后,切换回原来的分支,可以看到原来的分支已经完全回到2版的状态,再切回新分支,就是3版的状态

参考:http://www.tech126.com/git-reset/


例子:

1.原来版本的文件如下



2.增加一个文件



3.然后提交



4.查看日志


由3知道,我们刚提交的版本是第一个包含日志“testresetadd”,我们要回退到这个版本的前一个版本,即日志为(testreset2)这个大箭头所指的md5码。


5.回退



6.创建新分支



7. 然后提交



8. 切换到原来的分支,就是旧版的内容了




9.切回新建的分支,就是不受影响的新版




十.如何将历史的提交合并?

    用git rebase -i head~3命令,3代表要合并最近的三次提交,然后弹出一个编辑框,将最上面几行的文字的开头的pick修改成s,最旧的一次提交不用改,然后按esc,再输入:w,执行以后会弹出修改“提交描述”的地方,不编辑的话就直接按:q退出执行。

0 0