以macOS用Homebrew安装为例:
1、安装Homebrew:
官网有安装命令:https://brew.sh/
将Install Homebrew下面那行命令复制粘贴到Terminal中,回车就好了
2、运用Homebrew安装git:
Terminal中运行:brew install git
(还有其他方法,and其他系统的安装方法,Git官网中都可以找得到)
Git 提供了一个叫做git config的工具,专门用来配置或读取相应的工作环境变量。
这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
1、~/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置,用git config —system读写(操作系统可以设置多个用户)
2、~/.gitconfig 文件:用户目录下的配置文件,只适用于该用户,用git config —global读写
3、xxx/.git/config 文件:当前项目Git目录的配置文件,只适用于当前项目
(这三个文件中的配置,下面的会覆盖上面的)(即:优先级从低到高)
设置怎样显示自己的提交。例如:
git config —global user.name “moxiaoyan”(设置用户名)
git config —global user.email “moxiaoyan@qq.com”(设置邮箱)
git config —global —unset user.name(删除用户名设置)
git config —global —unset user.email(删除邮箱设置)
有些文件是不需要同步的,如:三方库
以Apple开发举例:Pods文件夹下的所有三方库,可以根据Podfile用cocopods下载就行
需要忽略的文件可以用.gitignore设置,github上有个库保存了各个语言适用的gitignore文件,需要的可以自取:https://github.com/github/gitignore

图片来自:菜鸟教程
1、工作区workspace:就是我们敲代码编辑文件的地方
2、暂存区staging area:修改过的文件需要暂存后才能commit
3、本地版本库local repository:将暂存区的代码commit后,就会存在本地仓库。(本地可以保存多个commit,后一起提交)
4、远程版本库remote repository:commit后的代码push后,就会提交到远程仓库了。(就可以在云端上保存你的代码了)
按正常工作流程的顺序介绍,接下来的命令说明中:
<>:表示应该根据情况填写不同的值
[]:表示可选参数
git init(创建一个空的git仓库,默认为master分支)
(就可以在项目文件中看到.git文件夹(默认隐藏),所有此项目相关的快照数据都会存放在这里)
git clone https://github.com/XXX.git(拷贝一份远程仓库,即下载一个项目)
git status(查看上次提交后文件的修改情况)
git status -s(简洁显示)
add命令可以将文件添加到暂存区
git add.(添加所有文件)
git add hello.txt readme.md …(添加指定文件)
git add dir(添加指定文件夹)
git rm hello.txt(将文件从工作区中删除)
git rm -f hello.txt(已经放到暂存区的文件,需要使用强制删除指令-f)
git rm —cached hello.txt(将文件从暂存区中移除,但保留在工作区)
git rm -r *(递归删除当前目录下的所有文件和子文件)
git mv readme readme.md(重命名文件)
git mv readme dir(移动文件)
git stash(将当前修改存储起来)
git stash list(查看存储列表)
git stash clear(清除所有存储)
git stash pop(应用最后一次存储,并删除)
git stash apply(恢复最近一次存储)
git stash apply stash@{2}(恢复某一次存储)
git stash drop stash@{2}(删除某一次存储)
git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。格式如下:
git pull <远程主机名> <远程分支名>:<本地分支名>
从远程获取代码,并合并本地的版本
git pull(拉取更新)
git pull -r(rebase:没有merge那个提交 )
git pull origin(更新)
git pull origin dev(拉取dev分支)
如:
git pull origin master:dev(将远程主机origin的master分支拉取过来,与本地的dev分支合并)
git pull origin master(如果需要合并的是当前分支,则冒号后面的分支名可以省略)
git diff [file](工作区-暂存区,可以指定文件)
git diff --stat(简洁显示)
git diff —staged [commitID] [file] 暂存区和上一次commit的差异:(可以指定commitID和文件)
git diff —cached [commitID] [file](同上)
git diff [commitID1] [commitID2] (两次提交差异)
提交暂存区到本地仓库
git commit -m [message](message:提交日志)
git commit [file1] [file2] ... -m [message](提交指定文件)
如果需要提交的文件,不想一个一个的add到暂存区,可以使用-a参数:
git commit -a -m [message] (-a会提交Untracked状态的内容)(Untracked:未暂存)
git reset(将暂存区文件重置到跟上一次commit保持一致,工作区文件保持不变)
git reset HEAD^(回退所有内容到上一个提交)
git reset HEAD^^(回到上上个提交)
git reset HEAD~1(回到上一个版本 可以写:1~100)
git reset HEAD^ hello.txt(回退hello文件)
git reset <commitID>(回滚提交记录,但本地代码不回滚)
git reset --hard HEAD(撤销工作区和暂存区的所有内容,慎用!)
git reset --hard <commintID> (回滚提交记录和本地代码)
// reset会清掉指定commitID后的所有提交,已提交远端的记录回滚,慎用!!!
git reset --soft HEAD^ (软撤销)
git revert <commitID> 还原指定提交(会直接生成新的commit,等待push)
Tips:如果需要还原多次commit,应该按commit的逆序revert,才不会冲突。
将本地的分支提交上传到远程分支并合并,命令格式如下:
git push <远程主机名> <本地分支名>:<远程分支名>
git push <远程主机名> <本地分支名>(如果本地分支和远程分支同名,可以省略冒号后的远程分支名)
git push <远程分支名>
例:
git push origin master:master(将本地的 master分支推送到 origin 主机的 master 分支)
git push origin master(同上)
git push origin HEAD:refs/for/master
git push origin HEAD:refs/for/podplus
git push origin --delete master(删除 origin 主机的 master 分支)慎用!
git log(查看历史提交记录)
git log —oneline (简洁输出)
git log —graph —oneline (显示修改详情)
git blame <file>(以列表形式查看指定文件的历史修改记录)
git log [-p] master..dev (dev分支相比master分支有哪些不同的提交)(仅包含分支的提交)
git log [-p] master…dev (dev分支和master分支有哪些不同的提交)(包含拉出分支后master的所有提交)
git branch(列出本地分支)
git branch dev(创建dev分支)
git branch -d <分支名>(删除已经合并过的分支)
git branch -D <分支名>(强制删除未合并的分支)
git checkout dev(切换到dev分支)
git merge dev(将dev分支合并到当前分支[如:master分支]上)
分隔符上部分:当前分支内容
分隔符下部分:远程分支内容
git checkout —theirs lib/base.all (采用远程分支)
git checkout —ours lib/base.all(采用本地分支)
// 如果冲突暂时解决不了,就可以撤销合并
git merge —abort(撤销合并)
git cherry-pick <commitID>(引入某个提交的修改)
git cherry-pick --edit <commitID>(引入某个提交的修改,并编辑其commit msg)
git cherry-pick --e <commitID>(引入某个提交的修改,并编辑其commit msg)
git cherry-pick <commitID1> <commitID1>…(引入多个提交)
git cherry-pick <commitID1>…<commitIDn>(引入从commitID1到commitID1n的所有提交)
git cherry-pick <commitID1>^…<commitIDn>(包含commitID1)
git cherry-pick <branchID>(引入某个分支上的最后一个的提交的修改)
如果项目达到一个重要的阶段,并希望永远记住那个特别的提交,可以使用git tag给它打上标签
git tag [-a] v1.0(不用-a,不会记录打标签的时间、用户,不能添加注解)
git tag -a v0.9 <commitID>(给已经提交的commit追加标签)
将dev分支合并到当前分支:
git merge dev
git rebase dev
Merge:形成一个新的节点
处理冲突更直接
适用于:公共分支的代码同步和合并
Rebase:把分支的commit”剪”下来,然后追加到主干 (commitID会跟原dev分支上的不同)
如果此时dev还需要同步master的代码,dev分支就会有两份不同commitID的相同提交,中间还会插一个新的commintID
能够保证清晰的commit记录
适用于:个人未提交远端的commint记录的优化
举例:用rebase的方式反向合入master分支的代码:
git rebase master
git merge --continue
git rebase -i [合并后需要接的上一个提交commitID]
// 按 I开始编辑
// pick 的意思是要会执行这个 commit
// squash 的意思是这个 commit 会被合并到前一个commit
将需要合并的pick改成squash
ESC ,输入 wq(保存退出)
此时本地的多个commit就合成了一个了,再push。。。
3.1、修改最后一条commit message
git commit --amend
3.2、修改任意一条commit message
git rebase -i HEAD~2 (倒数第几条,从1开始)I,进入编辑,将需要修改的commit前面的pick修改为edit;
(编辑方式:按Esc,按:,输入:wq,回车)git commit --amend修改2.2指定的commit message(编辑方式如上)git commit --continue (完成 rebase)git help xxx(可以查询相应命令的参数格式)
如:
git help config
git help commit
touch readme.md(新建一个文件)
vim readme.md(打开一个文件编辑)
参考:
Git官网:https://git-scm.com/