向廖大神学习:Git教程 - 廖雪峰的官方网站
下面是自己的一些总结:
1、在windows上安装Git:
在Windows上使用Git,可以从Git官网(Git - Downloads)直接,然后按默认选项安装即可。
2、创建版本库:
首先,选择一个合适的地方,创建一个空目录,通过【git init】命令把这个目录变成Git可以管理的仓库。
也可用命令行创建文档:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
注:此时目录下多了一个.git目录;如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用【ls -ah】命令就可以看见。
【mkdir <name>】:创建文件夹。
【cd <name>】:进入文件夹。
【pwd】:用于显示当前目录。
3、查看修改的文件
我们修改文件之后,可以用【git status】命令查看哪些文件被修改了。
如果记不清上次怎么修改的某个文件,可以用【git diff <name>】可以查看修改内容。【cat <name>】可以用来查看文件。
4、提交代码
第一步,用命令【git add <name>】告诉Git,把文件添加到暂存区。注【git add .】表示提交本地所有修改。
第二步,用命令【git commit -m "xxx"】告诉Git,把文件提交到仓库。注:"xxx"表示提交时备注。
5、分支管理
【git branch】:查看本地分支,当前分支前面会标一个*号。
【git branch -a】:查看全部(本地+远程)分支。
【git branch <name>】:创建分支。
【git checkout <name>】:切换分支。在 Git 2.23 版本中,引入了一个名为 git switch <name>
的新命令,最终会取代 git checkout
【git checkout -b <name>】:创建+切换分支。
【git checkout -b <newname> <name>】:创建已有分支+切换到新分支,想在<name>分支新建一个新的<newname>分支。
【git merge <name>】:合并某分支到当前分支,使用Fast-forward“快进模式”合并。第二种合并分支的方法是 git rebase <name>
【git merge --no-ff <name>】:合并某分支到当前分支,不使用Fast-forward“快进模式”合并,保留分支的commit历史。
【git merge --abort】:取消合并。
【git branch -d <name>】:删除本地分支。
【git push origin --delete <name>】:删除远程分支。注意:分支名不用加‘origin’ !在删除远程分支时,同名的本地分支并不会被删除,所以还需要单独删除本地同名分支。
6、版本回退
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令【git reset --hard commit_id】。
使用【git reset --hard HEAD^】回退上一个版本。
使用【git reset --hard HEAD~100】回退往上100个版本。
穿梭前,用【git log】或者【git log --pretty=oneline】可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用【git reflog】查看命令历史,以便确定要回到未来的哪个版本。
注:如果回退完版本之后,发现修改的代码不能push,但是pull下来又是回退前的代码,建议用【git push origin master --force】 来强行覆盖远程记录。
7、撤销修改
场景1:命令【git checkout -- readme.txt】意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被add放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经add添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
场景2:你该乱了工作区某个文件的内容,还add添加到了暂存区时,想丢弃修改,分两步,
第一步用命令【git reset HEAD readme.txt】,就回到了场景1,第二步按场景1操作。
8、删除文件
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令【git rm <name>】删掉,并且【git commit】。现在,文件就从版本库中被删除了。
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本【git checkout -- test.txt】
9、克隆一个本地库
【git clone <name>】例如:git clone git@github.com:michaelliao/gitskills.git
10、git fetch
git fetch 命令用于从远程获取代码库。该命令执行完后需要执行 git merge 远程分支到你所在的分支。
git fetch origin
git merge origin/master
11、如果正在开发的分支并不想提交,但是又需要切换到其他分支去修改bug:
可以使用【git stash】来暂存一下修改,然后使用【git stash pop】来恢复。
一般在开发时总要敲的几个命令循环:
【git checkout -b <name>】:创建+切换分支。
【git add .】:提交本地所有修改。
【git commit -m "xxx"】告诉Git,把文件提交到仓库。
【git pull】:拉取远程修改。
【git push】:提交远程。
【git checkout <name>】:切换分支。
【git merge --no-ff <name>】:合并某分支到当前分支。
一个简单的基于分支的git工作流
查看当前 git 信息
git config --list
查看 git 用户名、邮箱
git config user.name
git config user.email
配置 git 用户名
git config --global user.name "xxx(新的用户名)"
配置 git 邮箱信息
git config --global user.email "xxxx@xxx.com(新的邮箱)"