16.git使用总结

1、下载资源

软件:Git-2.10.0-64-bit.exe(win64)

学习资料:https://git_scm.com/book/zh/vz

    https://git_scm.com/book/en/vz

2、your ID

$ git config --global user.name "sheng"

$ git config --global user.email shengxxxx@163.com

3、基本指令

$ git init 创建本地仓库

$ git add *.c *.h 跟踪指定对象

$ git add README 建立跟踪文件名README

$ git commit -m 'inital project version'   提交更新并注释

$ git commit -m 'log' -a提交更新并注释 -a:add

$ git atatus 查看已被跟踪文件状态

4、应用指令

$ git diff -staged比较当前文件和暂存区域之间的差异

$ rm README 移除文件

$ git rm README 记录移除文件操作

$ git rm --cache README 保留文件在磁盘,但不想让git继续跟踪

$ git mv file_old file_new修改跟踪文件名

$ git reset HEAD README取消暂存的文件

$ git checkout --README 撤销对文件的修改

5、查看提交历史

$ git log 查看提交的历史

$ git log -p -2 -p:显示每次提交内容的差异 -2:显示最近两次提交

$ git log --stat 查看每次提交的简略的统计信息

6、删除仓库

$ find . -name ".git" | xargs rm -Rf

7、忽略不需要跟踪文件

-1、建立:$ vim .gitignore

建立 .gitignore文件,打开文件,填入下述语法

如需忽略文件:*.o    *.d   *.cppxxxx.*

如需忽略文件夹:test/*

-2、配置语法:


   以斜杠“/”开头表示目录;

   以星号“*”通配多个字符;

   以问号“?”通配单个字符

   以方括号“[]”包含单个字符的匹配列表;

   以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

   此外,git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

-3、示例:


   (1)规则:fd1/*
      说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;

   (2)规则:/fd1/*
       说明:忽略根目录下的 /fd1/ 目录的全部内容;
   (3)规则:
/*
!.gitignore
!/fw/bin/
!/fw/sf/
说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;

8、远程仓库

(1)添加远程仓库

$ git remote

$ git remote add test https://github.com/paul/ticgit   //test指代URL

$ git remote -v

$ git fetch test  //拉取远程仓库中有,而你没有的信息

$ git push origin master//推送到远程仓库

$ git remote show origin  //查看远程仓库信息

(2)远程仓库移除与重命名

$ git remote rename test paultest更名为paul

$ git remote rm paul 移除该镜像

(3)克隆现有仓库

$ git clone https://github.com/libgit2/libgit2

9、创建分支

$ git branch testing//创建 但HEAD还在master

$ git checkout testing//切换到testing分支

$ git checkout master//切换到master

10、删除已跟踪文件

如果文件已经被跟踪且被推送到远程,可以按照下面方法解决:

  1. rm -rf 文件
  2. git rm -r --cached 要忽略的文件
  3. git add -A (添加所有)
  4. git push origin 分支

如果同名的文件过多,如:.class 文件被提交了,那么如果这样一个一个显然效率太低,可以按照下面方法操作

  1. find . -iname 文件名 -exec rm -rf {}\;
  2. 重复上面的步骤,文件名替换为下一个要删除的文件名
  3. 修改gitignore,添加忽略文件
  4. git rm -r --cached 要忽略的文件
  5. git add -A
  6. git push origin 分支

---------------------------------------------------------------------------------------------------

git使用实例记录

-------------------------------------------------------------------------------

1、修改文件的提交(转)

比如你在仓库目录下的其中一个文件夹file1中修改了一个.C文件

$ git add file1          //路径注意不要add错了,必须是当前.git可见的路径,在此时的bash下只可见file1,不可见.c文件。

$ git commit -m 'your commit'

这样就完成修改和提交工作了。

查看各提交历史:

$ git log --pretty=oneline  //会出现各提交记录版本号以及你的commit

2、版本回退

参:http://blog.csdn.net/zhang31jian/article/details/40982161

回退到上一个版本号显示:

$ git log --pretty=oneline

$ git log --pretty=oneline            //1
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

现在,我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset命令:

$ git reset --hard HEAD^              //2  回退到前一个版本
HEAD is now at ea34578 add distributed
在Git中,用 HEAD 表示当前版本,也就是最新的提交 3628164...882e1e0 (注意我的提交ID和你的肯定不一样),上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ ,当然往上100个版本写100个 ^ 比较容易数不过来,所以写成 HEAD~100

$ git reset --hard 3628164           //3   回退到指定版本
HEAD is now at 3628164 append GPL

版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

现在总结一下:

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。      //4  找出回退的版本号,以便吃后悔药

3、分支管理

(1)、建立分支

$ git branch dev

(2)、查看分支

$ git branch -a     // 此时HEAD指针仍指向master

(3)、切换并创建新分支

$ git checkout -b dev   //git checkout命令加上-b参数表示创建并切换分支上

(4)、查看切换的分支

$ git branch -a

git branch -a 命令可以查看所有分支,现在我们HEAD指针便指向dev分支,大家可以在上图中看到dev分支上有个*号。

(5)、切换到master

$ git checkout master      //cat test.txt  显示test.txt中的内容

(6)、合并分支

$ git merge dev //合并dev分支修改内容到master主干上,注:操作的HEAD指针先指向master

(7)、删除分支

$ git branch -d dev //删除dev分支

查看一下:git branch -a  发现只有master这一个主分支了。

(8)、总结指令

  • 查看分支 git branch -a
  • 创建分支 git branch name
  • 切换分支 git checkout name
  • 创建并切换 git checkout -b name
  • 合并某分支到当前分支 git merge name
  • 删除分支 git branch -d name

后再提交。

(9)、分支合并冲突

Git告诉我们readme.txt文件存在冲突,必须手动解决冲突后再提交。

用到的指令:

创建分支并修改内容

$ git checkout -b dev1  //切换并创建分支dev1   以下在dev1分支上

$ vim test.txt  //创建文本并编辑

$ cat test.txt   //查看文本内容

$ git add test.txt   //添加到git

$ git commit -m 'add test.txt'  //提交

切换到master合并分支test.txt

$ git checkout master

同上建立一个test.txt文档并添加内容

$ git merge dev1   

合并失败,手动修改后合并

删除dev1分支

$ git branch -d dev1

用 git log --graph --pretty=oneline --abbrev-commit 命令,查看一下分支合并

(10)、分支与分支合并

$ git merge --no--ff -m "test" dev //合并dev

--no-ff参数表示禁用快速合并

下面我们来说一下一般企业中开发一个项目的分支策略:分支命名

  • 主分支 master   
  • 开发分支 develop   
  • 功能分支 feature
  • 预发布分支  release
  • bug 分支 fixbug
  • 其它分支 other

4、开发协作(远程仓库)

------------参:http://www.oschina.net/question/31384_157479

(1)、查看远程仓库

$ git remote    //查看远程仓库

$ git remote  -v  //加-v选项可以查看详细信息

(2)、分支推送

$ git push origin master   //本地master分支与远程的master分支已同步

$ git push origin dev        //同步dev分支

本地有很多分支,有哪些分支需要推送到远程仓库中呢?一般是这样的,

  • master 分支是主分支,要时刻与远程同步,一般我们发布最新版本就用master分支
  • develop 分支是开发分支,团队中所有人都在这个分支上开发,所以也需要与远程同步
  • bug 分支一般只在本地使用来修复bug,一般不需推送远程仓库中
  • feature 分支是否需要推送到远程,要看是不是有几个人合作开发新功能,如果你是一个开发,那就留在本地吧
  • release 分支一般是系统管理,推送或抓取的分支一般与开发人员无关
  • other 分支大家按需求分配

(3)、本地分支与远程分支进行链接

$ git  branch --set--upstream dev  origin/dev //将dev分支与远程origin/dev分支进行链接

$ git push     //git pull 成功,但是合并有冲突需要手动解决,解决的方法和分支管理中的解决冲突完全一样。

总结:

多人开发模式:

1)试图用git push origin branch-name推送自己的修改如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并如果合并有冲突,则解决冲突,并在本地提交没有冲突或者解决掉冲突后。

2)再用git push origin branch-name推送就能成功如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

5、远程操作 

参:http://www.ruanyifeng.com/blog/2014/06/git_remote.html

1)列出远程主机

$ git remote  

$ git remote   -v  //-v参考远程主机网址

克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。

$ git clone -o [your name] https://xxxxxxxxx

2)远程操作基本指令

git remote show命令加上主机名,可以查看该主机的详细信息。

$ git remote show <主机名>

git remote add命令用于添加远程主机。

$ git remote add <主机名> <网址>

git remote rm命令用于删除远程主机。

$ git remote rm <主机名>

git remote rename命令用于远程主机的改名。

$ git remote rename <原主机名> <新主机名>

3) git fetch

将远程主机的更新全部取回本地,查看其他人的进程,对本地的开发代码没有影响。

--1)取回资源

默认取回所有分支代码,可以指定取回:

$ git fetch <远程主机名(origin)>  <分支名(master)>

$ git branch -r  //查看远程分支

$ git branch -a //查看所有分支

--2)建立分支

直接创建远程分支:

$ git checkout -bnewbranch origin/master    //origin/master的基础上,创建一个新分支

在本地创建合并到远程分支:

$ git merge origin/master   //在当前分支上,合并origin/master

4) git pull

取回远程主机某个分支的更新,再与本地指定某个分支合并。

--1)基本合并指令

$ git pull <远程主机名> <远程分支名>:<本地分支名>
举例:$ git pull origin next:master //取回origin主机的next分支,并与本地的master合并
$ git pull origin next //如果远程分支是当前分支合并,则冒号后面的部分也可以省略
上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。

--2)建立本地与远程追踪关系

自动建立追踪:
在某种场合下git会自动建立本地与远程代码之间的追踪关系,比如git clone的时候所有本地分支默认与远程主机的同名分支建立一种 追踪关系。
手动建立追踪:
$ git branch --set-upstream master origin/next 
//上面命令指定master分支追踪origin/next分支。

如果当前分支与远程分支存在追踪关系,git pull可以省略远程分支名:

$ git pull origin  //本地的当前分支自动与对应的远程origin主机追踪分支进行合并。

$ git pull   //如果当前分支只有一个追踪分支,那么远程主机名(origin)也可以省略

--3)删除不存在远程对应分支的本地分支

        如果远程主机删除了某个分支,默认情况下,git pull不会在拉取远程分支的时候,删除对应的本地分支。

如果要删除不存在远程对应分支的本地分支,可以用以下指令:

$ git pull -p

#等同于下面命令:

$ git fetch --prune origin

$ git fetch -p

5)git push

将本地分支的更新推送到远程。

$ git push <远程主机名> <本地分支名>:<远程分支名>

举例:

---1、如果省略远程分支名,表示本地分支推送与之存在追踪关系的远程分支,如果远程分支不存在,则会被新建。

$ git push origin master  //将本地的master分支推送到远程主机,若远程主机分支不存在,则会新建。

---2、如果省略本地分支名,则会删除指定的远程分支,因为等同于推送一个空的本地分支到远程分支。

$ git push origin  :master   

#the same

$ git push origin --delete master  //删除远程主机的master分支

---3、如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略。

$ git push origin   //将当前分支推送到origin主机的对应分支

---4、如果分支只有一个分支,那么主机名也可以省

$ git push

---5、如果本地分支与多个主机存在追踪关系。

$ git push -u origin master

---6、不管是否存在远程分支,将本地的所有分支都推送到远程主机。

$ git push --all origin

---7、如果远程主机的版本比本地版本更新,push会报错,可以强制推送。

$ git push --force origin


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风浅醉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值