zoukankan      html  css  js  c++  java
  • 团队Git使用教程

    团队git使用教程(不要使用IDE自带版本控制功能)

    角色分配:项目观察者、项目拥有者、项目开发人员

      

     

    场景:项目拥有者创建项目

    1. 在当前目录新建一个git代码库
    git init "testgit_pm"

    2. 切换bash路径到工作目录,否则无法使用git命令
    cd testgit_pm

    3. 添加目录或文件 切换目录 cd [xxx] 然后
    git add .




    4. 忽略文件
    vi .gitignore



    4. 提交到暂存区
    git commit -m "描述内容"

    5. 再次提交文件
    git add ./
    git commit --amend -m "修改内容"
    6. 显示当前分支的最近几次提交
    git reflog #简略显示当前分支的最近几次提交
    git log #详细显示当前分支的版本历史


    5. 配置当前项目用户信息(随便填就可以了,这里和远程Git系统分配的账号无关)
    git config user.name "[name]"
    git config user.email "[email]"

    设置不自动转换换行符号(如果项目在linux系统和windows系统开发会有换行符号差别)
    git config --gobal core.autocrlf false

    6. 推送到远程仓库(这里会弹出输入用户名和密码的认证窗口)
    git push "https://git.oschina.net/sutroon/testgit.git" --all

     

    场景:项目拥有者创建分支

    1. 新建分支
    git branch [branch_name] # 新建分支,但依然停留在当前分支(以当前内容为分支内容)
    git branch [branch_name] [commit] # 新建一个分支,指向指定commit
    2. 切换到指定分支,并更新工作区
    git checkout [branch_name]
    git checkout - # 切换到上一个分支
    3. 上传本地指定分支到远程仓库
    git push "https://git.oschina.net/sutroon/testgit.git" "develop1"
    git push "https://git.oschina.net/sutroon/testgit.git" "develop1":master # // 提交本地develop1分支作为远程的master分支

    场景:项目开发人员修改文件

    1. 克隆项目
    git clone "https://git.oschina.net/sutroon/testgit.git" "testgit_deve1"

    2. 显示有变更的文件
    (粗略显示本次修改的文件,即使执行git add命令也会显示)
    git status


    3. 显示暂存区和工作区的差异
    (详细显示修改后,未执行git add命令之前的文件详情)
    git diff

    4. 显示当前分支的最近几次提交
    git reflog

    5. 配置当前项目用户信息(随便填就可以了,这里和远程Git系统分配的账号无关)
    git config user.name "[name]"
    git config user.email "[email]"

    设置不自动转换换行符号(如果项目在linux系统和windows系统开发会有换行符号差别)
    git config --gobal core.autocrlf false

    6. 推送到远程仓库(这里会弹出输入用户名和密码的认证窗口)
    git push "https://git.oschina.net/sutroon/testgit.git" --all

    项目观察者

    统计操作:
    1. 显示所有提交过的用户,按提交次数排序
    git shortlog -sn

    文件管理操作:
    1. 显示指定的文件是什么人在什么时间修改过的
    git blame [file]

    每日工作

    取回远程仓库的变化,并与本地分支合并(保存用户名和密码:git config credential.helper store)
    git pull "https://git.oschina.net/sutroon/testgit.git" "master"

    推送所有分支到远程仓库

    git push "https://git.oschina.net/sutroon/testgit.git" --all

    场景:文件冲突

    pm编辑了file1.txt,执行git add .; git commit -m "pm编辑了file1"; git push ... --all;
    dev编辑了file1.txt, 执行git add .; git commit -m "dev编辑了file1"; git push ... -all;


    方法1:
    冲突的时候,如果想直接用远程的
    git checkout --theirs file1.txt
    git add .
    冲突的时候,如果想直接用本地的
    git checkout --ours .
    git add .
    方法2:




    撤销操作:
    1. 显示commit历史以及每次commit发生变更的文件
    git log --stat
    2. 恢复某个commit的制定文件到暂存区和工作区
    git checkout "[commit]" "[file]"

     忽略文件:

    在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件)。这个文件每一行保存了一个匹配的规则例如:

    # 此为注释 – 将被 Git 忽略 
    *.a # 忽略所有 .a 结尾的文件
    !lib.a # 但 lib.a 除外
    /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
    build/ # 忽略 build/ 目录下的所有文件
    doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

    规则很简单,不做过多解释,但是有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

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


    更改操作
    1. 恢复暂存区的指定文件到工作区
    (比如工作区的文件被改乱了,想撤销,就可以从暂存区恢复最后一次提交的文件到工作区)
    git checkout [file]


    2. 恢复某个commit的指定文件到暂存区和工作区
    git reflog #简略显示当前分支的最近几次提交,获取[commit]ID。
    git checkout "[commit]" "[file]"

     

    删除操作

    git之从过时的header还原到master的最新header

    git stash //先备份已经改变的文件
    git checkout master //从过时的header还原到master的最新header,(即当前header是老的,过时的)
    git stash pop //恢复备份的文件
    git add //添加改变的文件
    git commit //提交到本地库


    git checkout回之前版本后,如何把旧版本写的代码push上去?

    保存你的修改
    git commit ...
    git tag tmp

    更新主分支到remote最新
    git checkout master
    git pull origin master

    合并你的修改并提交到remote
    git merge tmp
    git push origin master

    clean
    git tag -d tmp

    参考文章:

    Git忽略规则及.gitignore规则不生效的解决办法 [http://www.pfeng.org/archives/840]
    git之从过时的header还原到master的最新header [http://blog.csdn.net/conjimmy/article/details/51512378]
    git checkout回之前版本后,如何把旧版本写的代码push上去? [https://segmentfault.com/q/1010000004056628/a-1020000004056703]

    版权声明:本文采用署名-非商业性使用-相同方式共享(CC BY-NC-SA 3.0 CN)国际许可协议进行许可,转载请注明作者及出处。
    本文标题:团队Git使用教程
    本文链接:http://www.cnblogs.com/sochishun/p/7496350.html
    本文作者:SoChishun (邮箱:14507247#qq.com | 博客:http://www.cnblogs.com/sochishun/)
    发表日期:2017年9月8日

  • 相关阅读:
    Android开发总结
    LeakCanary原理分析
    机器学习
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作
    远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm)
  • 原文地址:https://www.cnblogs.com/sochishun/p/7496350.html
Copyright © 2011-2022 走看看