3

若有任何地方需要修改,请及时联系,菜鸟一枚,多多指教。

1、git安装

git几乎所有的平台都可以安装,安装教程。

在Linux下安装git
输入git,查看系统是否存在git,若没有安装,它会提示你如何做。
git
未安装过会会输出,按照以下提示安装就行可以:
The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git

在windows下安装git
直接官网下载安装,可通过git 看是否安装过。

在mac下
查看是否安装过用
git
安装过会出现以下提示:

WMBdeMacBook-Pro:~ WENBO$ git
usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add        Add file contents to the index
   mv         Move or rename a file, a directory, or a symlink
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect     Use binary search to find the commit that introduced a bug
   grep       Print lines matching a pattern
   log        Show commit logs
   show       Show various types of objects
   status     Show the working tree status

grow, mark and tweak your common history
   branch     List, create, or delete branches
   checkout   Switch branches or restore working tree files
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   merge      Join two or more development histories together
   rebase     Reapply commits on top of another base tip
   tag        Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch      Download objects and refs from another repository
   pull       Fetch from and integrate with another repository or a local branch
   push       Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.

未安装有以下两种办法进行操作:
1、通过homebrew安装Git

  • 未安装homebrew,需安装homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 安装git
brew install git

2、通过Xcode安装

直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

2、配置

2.1用户配置
先使用git config -list查看当前用户和邮箱得配置信息。若无在配置:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"

注意: git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

题外话:我第一次安装的时候忘记user.name和user.email了,它也是命令的一部分。

2.2 密钥配置
编写代码之前还需要生成并配置SSH-key(这个东东是将本地的工作区中的分支和远程的分支进行关联的)。
下面的命令是Linux和mac下的,

#生成密钥,一路回车、用默认选项
ssh-keygen -t rsa

Windows
ssh-keygen -t rsa -C '配置的邮箱'.

在本地(我的电脑或者计算机)中找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件(id_rsa是私钥,id_rsa.pub是公钥),id_rsa.pub文件中的内容复制到粘贴板。
注意:粘贴的一定是.pub文件,里面的是公钥,另一个文件不能随便透露,里面是私钥。

或者用以下的命令进行复制:
cat ~/.ssh/id_rsa.pub** | clip # Windows
cat ~/.ssh/id_rsa.pub** | pbcopy # MacOS

将密钥粘贴到代码库的SSH keys中。

3、创建版本库

版本库:
官方说法:这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

其实简单说就是管理代码的仓库,你所有的操作都在里面。

步骤:
(windows)首先选择好你要将代码放在哪里。最好是不要在master进行开发。

切换分支
一般公司中的许多人在开发同一个项目,需要在master分支下切一个dev子分支,每个人也可以切换自己的一个子分支,在开发完成后,在push到主分支。

注意:Linux服务器下,在本地建好分支后,将要本地分支推送到远程服务上,使得远程也存在该分支:git pull origin 本地分支:远程分支

4、编写代码

编写代码的方式有两种,一是你可以自己新建文件,二是克隆公司其他前辈的代码,在此基础上进行修改。

克隆代码
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。注意分支的选择。

git clone 代码库地址

编写代码
如果使用的是Linux服务器的话,用vim打开该文件。

vim 文件名或者vi 文件名 #打开文件
:wq #保存退出

注意:强制退出可以在后面加一个“!”,若对文件无任何修改可以直接用“:q”进行突出

编写完成提交代码:
注意顺序:修改->git add->git commit->git push
修改可能有多个,可以git add *,就是将本地修改的文件全部提交了。或者git add 修改的文件的名字 也是可以的。

我常用的提交步骤:

git status #查看版本库中修改的文件,需要提交的文件,确定要添加到暂存区的文件。
git add #修改的文件名 #将要提交的文件首先提交到暂存区
git status #查看版本库的状态
git commit -m "提交的说明" #编写提交的说明便于以后查找
git log #查看提交记录
git push origin 本地分支:远程分支 #Linux服务器下将本地分支推送到远程。(我们需要code review,所以是 git push origin 本地分支:refs/for/远程分支)

扩展:若你刚push完成,又在本地修改了代码需要马上提交,并且你所用的分支是和别人公用,在别人没提交的基础上,可以用git commit --amend将修改的文件提交到上次push的文件上,然后用git push进行推送;若别人已经提交代码但你还做了此操作,你就需要git reset --soft本地的文件回退版本。

5、常见的错误:


合并代码
注意:merge的时候,可能会出错冲突,那也咩关系,解决就是了!
在当前分支已编写完成代码并且已经git add和git commit,git push之后,需要合并代码。
首先,假设要讲你当前分支合并到dev分支,切换dev分支,git status查看状态,然后需要git pull代码,因为是多人合作开发,在不断的更新代码,需要将你本地的代码和远程的分支保持一致。然后git status查看状态,git merge +切换你开发所在的分支,将你刚才编写好的分支与当前dev分支合并。可能会冲突,解决就是了。

> 解决办法:

(1)git status查看冲突的文件(注意:Git用<<<<<<<(服务中的代码),=======,>>>>>>>(本地中的代码)标记出不同分支的内容,这种表示冲突。)
2)在本地合并,解决冲突,再推送:git pull --->本地解决冲突--->git commit--->git push origin 分支名

版本回退:
回退到上一个版本:

`git reset --hard HEAD^`(撤销到原先的最新版本,若没有关界面的话,可以往界面的上查找版本号,将HEAD^换成版本号,若已经关闭,可以用 git reflog命令)
`git reset --soft xxx`: 回退到某个版本,只退回了commit的信息,不会回复到index file一级。如果还要提交,直接commit即可。也就是说缓存区和工作目录都不会改变,改变的是提交历史。
`git reset --hard xxx`: 彻底退回到某个版本,本地的源码也会变为上个版本的内容,也就是缓存区和工作目录都同步到你指定的提交。  

如果你想完全舍弃你没有提交的改动,可以使用git reset --hard HEAD。

建议工作中用:git reset --soft xxx(代表版本号,用git log就能看到,粘贴前5个字符就行)防止代码丢失。

衍伸:git reflog与git log 区别

  • git log 只能查看当前分支的log,不能查看已删除分支的
  • git reflog可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

拉取代码冲突

若多个人修改同一个文件,可能会造成冲突,你可以这样做:
先将本地你修改的文件`git stash`;
然后`git pull`远程代码库中的代码;
之后`git stash pop`(确保暂存区的文件只是你刚才stash的,  否则很容易出现问题),将刚才stash的文件全部放回到本地;
检查本地是否有冲突,有冲突的话解决,没有的话直接git add。

多分支开发时,改错分支怎么办?如在本地master分支开发,未commit,实际想改的是dev分支

支招:可以在`master`分支运行`git stash`,然后切换到`dev`分支,运行`git stash pop`将暂存内容放出来

6、常用的命令:

git  branch                      #查看当前分支
git  checkout -b dev             #创建并切换子分支,dev可换成自己的分支名字
git  checkout dev    #切换分支
git  branch  dev     #创建分支
git  branch -d dev   #删除分支
git  merge 分支名     #合并某分支到当前分支所在分支 
git  checkout -b dev origin/dev  #创建远程origin的dev分支到本地
git init   #初始化仓库(把这个目录变成Git可以管理的仓库)
git merge dev #当前在master分支,git merge是将某指定分支合并到当前分支
git diff #查看这个做过的修改
git clean -f  #删除untracked文件
git log    #查看历史记录,显示从最近到最远的提交日志
git reset head <filename> #撤销暂存区
git checkout -- filename  #撤销暂存区的修改(分为两种,一种是回到和版本库中的一样,一种是回到上次暂存到暂存区的版本。命令中的“--”很重要)
假设当前写的东西进行到一半,有紧急任务,但当前的又不想提交:
**git stash** #将当前的工作储藏起来,以后恢复继续工作
**git stash list** #查看原先的工作
**git stash apply** #恢复储存的工作
**git stash drop** #删除原先储存的工作或者git stash    pop #恢复的同时也将stash内容删除
**git stash list** #查看并没有了

Linux常用命令:

mkdir+目录名      #新建版本库
touch+文件名      #新建文件(新建文件有两种方式:
touch+文件名      #直接新建一个文件
vi+文件名         #新建一个文件并进入编辑状态(如果文件已存在,则直接进入编辑状态))
cd+目录名         #进入目录
pwd              #显示当前所在目录的路径
cat 文件名        #查看内容
touch 文件名     #创建文件        
删除文件:**rm 文件名**(只是单纯删除文件)
上传文件:**rz #回车键,选择要上传的文件**(Linux命令,不是git命令)
下载文件:**sz 文件名(Linux命令,不是git命令)**
移动文件:**mv 文件名 path**
复制文件:**cp 文件名 新的文件名**
重命名文件:**mv  文件名  新的文件名** 

7、名词解释:
工作区:在电脑里能看到的目录
版本库:工作区有一个隐藏目录.git,Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

小知识:
(1)git status显示一些Untracked files ...文件,在根目录下创建.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

忽略文件的原则是:

忽略操作系统自动生成的文件,比如缩略图等;
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

可能是.gitignore写得有问题,可以用git check-ignore命令检查。

8、

好用的git commit --amend命令

这个命令修改最新的commit,包括comment和文件内容。

比如你提交了代码,之后又有新的改动,不想创建两个commit,那么就可以使用git commit --amend命令把新的内容添加到之前的commit里面。

  1. 会把暂存区的文件自动加入。
  2. 可以使用-a把工作区的文件也一起加入。

git commit --amend
git commit --amend -a

会弹出窗口修改comment,当然也可以使用"-m"参数指定comment。


年轻即出发
23 声望1 粉丝

不会UI的产品不是一个好前端