一、创建版本库
-
mkdir <文件名> 创建新的文件夹
如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名<包括父目录>不包含中文。
-
cd <文件名> 切换到新的文件夹
-
pwd 查看当前目录
-
git init 把当前目录变成git可以管理的仓库
-
git add <文件名> 使用命令git add
注意,可反复多次使用,添加多个文件,把文件加入暂存区;
-
git commit -m <提示文字> git commit 提交的是一个某个时段的快照,把暂存区的所有修改提交到当前分支。
-
git status 要随时掌握工作区的状态,使用git status命令。
-
git diff 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
二、版本回退
-
git reset --hard commit_id HEAD指向的版本就是当前版本。Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
-
git log 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
-
git reflog 要重返未来,用git reflog(已经删除的提交也可以查看)查看命令历史,以便确定要回到未来的哪个版本。
-
git log --pretty=oneline 只显示第一行(注意:没有git log --pretty=twoline)
-
git reset --hard HEAD^ 回退到上一个版本,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
-
cat readme.txt 查看文件readme.txt的内容
三、工作区、暂存区和版本库
工作区(Working Directory)
就是你在电脑里能看到的目录文件夹。
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git是跟踪的修改,每次修改,如果不用git add到暂存区,那就不会加入到commit中。
- git diff HEAD -- <文件名> git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别。
四、撤销修改
此时有两个种情况: 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 总之,就是让这个文件回到最近一次git commit或git add时的状态。
-
git checkout -- <文件名> 命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销。
一定要加上 --- ,否则就是切换到另一个分支
-
git reset HEAD <文件名> 把暂存区的修改撤销掉(unstage),重新放回工作区。
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。
五、删除文件
-
git rm 用于删除一个文件。删除工作区的文件,我们可以手动删除文件或是用命令 rm <文件名>。
当删除了一个工作区的文件后,我们查看状态,发现有两个选择。 一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit。 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本。 使用命令git checkout -- <文件名>
-
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
-
关联后,使用命令git push -u origin master第一次推送master分支的所有内容。
-
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改。
六、创建与合并分支
- 查看分支:git branch
- 创建分支:git branch 分支名
- 切换分支:git checkout 分支名
- 创建+切换分支:git checkout -b 分支名
- 合并某分支到当前分支:git merge 分支名
- 删除分支:git branch -d 分支名
七、解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。 解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。 用git log --graph命令可以看到分支合并图。
八、分支管理策略
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
九、Bug分支管理
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。(恢复有两个办法:一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;另一种方式是用git stash pop,恢复的同时把stash内容也删了)
- git branch -D <分支名> 强制丢弃一个没有被合并过的分支(在dev开发时,需要开发新任务,就在dev上建了新的分支aa,开发完commit了,切回dev后还没来得及合并,此时需求有变,需要删除分支aa,就可用-D强制删除)
十、多人协作、
-
git remote –v 查看远程库信息
-
git push origin branch-name 本地新建的分支如果不推送到远程,对其他人就是不可见的;从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
-
git pull 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
-
git checkout -b branch-name origin/branch-name 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
-
git branch --set-upstream branch-name origin/branch-name 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
多人协作的工作模式通常是这样:
首先,可以试图用git push origin <分支名>推送自己的修改; 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并; 如果合并有冲突,则解决冲突,并在本地提交; 没有冲突或者解决掉冲突后,再用git push origin <分支名>推送就能成功! 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <分支名> origin/<分支名>。
-
git cherry-pick <提交id> 选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit),如将A分支中的某一个或是几个commit合并到B分支中,我们先git log (--pretty=oneline) 查看提交ID。如果是要将A分支的commit76cada ~62ecb3 到合并到B分支,那么使用rebase 更合适。首先需要基于A创建一个新的分支,并指明新分支的最后一个commit,用git checkout -b newbranch 62ecb3,然后rebase这个新分支的commit到B(--ontoB),76cada^ 指明你想从哪个特定的commit开始,用git rebase --onto B 76cada^,得到的结果就是A分支的commit 76cada ~62ecb3 都被合并到了B分支。
十一、标签管理
创建标签
- git tag <标签名 | commit_id> 用于创建一个标签, 默认为HEAD.
- git tag v<版本号> commit_id 用于创建一个以某个commit点为截止点的版本
- git tag 查看所有标签
- git show v<版本号> 查看某个版本下的说明文字
- git tag –a <标签名> -m “提示描述” commit_id 创建某个版本并指定标签信息
操作标签:
- git push origin <标签名> 可以推送一个本地标签;
- git push origin –tags 可以推送全部未推送过的本地标签到远程;
- git tag -d <标签名> 可以删除一个本地标签;
- git push origin :refs/tags/<标签名> 可以删除一个远程标签。
十二、忽略特殊文件
忽略某些文件时,需要编写.gitignore; .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理。
十三、配置别名
-
git config --global alias.co checkout 配置checkout的别名为co
-
git config --global alias.ci commit 配置commit的别名为ci
-
git config --global alias.br branch 配置branch的别名为br
--global参数是全局参数
-
git ci -m "bala bala bala..." 以某一个别名来做相应的操作
-
git config --global alias.unstage 'reset HEAD' 配置撤销修改的别名为unstage
-
git config --global alias.last 'log -1' 配置显示最后一次提交的别名为last
-
cat .git/config 查看git配置文件中的配置,别名在[alias]中
---------------------此总结参考廖雪峰的git教程---------------------