其他命令
* git init 在当前路径下初始化创建一个repository
* git config --global alias.st status 把status配置成st --global参数是全局参数,
也就是这些命令在这台电脑的所有Git仓库下都有用。配置文件在C:\Users\username\.gitconfig
工作区和暂存区
- git diff 是工作区(work dict)和暂存区(stage)的比较
- git diff --cached 是暂存区(stage)和分支(master)的比较
撤销修改
* 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
* 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD file,就回到了场景1,第二步按场景1操作。
添加文件到Git仓库
- git add +文件名 注意,可反复多次使用,添加多个文件;
- git commit -m +"描述"(每次修改,如果不add到暂存区,那就不会加入到commit中)
- git status 命令可以让我们时刻掌握仓库当前的状态
- git diff +文件名 查看文件做出过哪些修改(需要在git add之前查看)
回退
- git log 查看历史记录 git log --pretty=oneline 把每个记录显示成一行便于查看
- git reset --hard HEAD^ HEAD表示当前版本,HEAD^表示上一个,HEAD~100表示向上100个
(WIN10 下使用git reset --hard HEAD~)
- git reset --hard 66e315f (commit id)
- git reflog 查看历史输入记录,进而查到commit id
回退后想再撤回,只需要找到想撤回到的版本使用的commit命令生成的commit id就可以,比如
git reset –hard 66e315f 但是如果关了电脑之前的命令看不到的话,可以使用git reflog查看历史输入记录。Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL。
删除文件
- git rm + 文件名 删除版本库中的文件。
- git checkout -- +文件名 把版本中的文件恢复到工作区
添加远程库
- git remote add origin git@server-name:path/repo-name.git 要关联一个远程库,
- git push -u origin master 关联后第一次推送master分支的所有内容;
- git push origin master 此后,每次本地提交后,只要有必要,就可以使用命令
git push origin master推送最新修改;
创建删除分支
- 查看分支: git branch
- 创建分支 : git branch +分支名
- 切换分支 : git checkout +分支名
- 创建+切换分支: git checkout -b+分支名 在本地创建和远程分支 对应的分支,
使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
- 合并某分支到当前分支 : git merge +分支名
- 删除分支: git branch -d +分支名
- 强行删除分支 git branch -D +分支名
- git merge --no-ff -m "描述" +分支名删除分支后,不会丢掉分支信息,仍然在远程库中保留。
合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
合并冲突
Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
git log –graph –pretty=oneline –abbrev-commit 看到分支的合并情况。。。
Bug分支
当前分支只完成一半不能提交,但是需要马上去另一个分支修复bug,需要使用
- git stash 当前工作现场“储藏”起来,等以后恢复现场后继续工作
- git stash list 查看储存的工作现场
- git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
- git stash pop,恢复的同时把stash内容也删了:
多人协作步骤
- 首先,可以试图用git push origin branch-name推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream branch-name origin/branch-name。
标签
- git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
- git tag -a <tagname> -m "blablabla..."可以指定标签信息;
- git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
- git tag可以查看所有标签。
- git push origin <tagname>可以推送一个本地标签;
- git push origin --tags可以推送全部未推送过的本地标签;
- git tag -d <tagname>可以删除一个本地标签;
- git push origin :refs/tags/<tagname>可以删除一个远程标签。
忽略特殊文件
创建 .gitignore文件,并push到github
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
git add -f App.class如果文件被忽略可以强制添加
git check-ignore命令检查规则
例如:
$ git check-ignore -v App.class
.gitignore:3:*.class App.class
远程主机
* git remote 查看远程库信息 git remote -v 查看更详细的信息
* git remote show <主机名> 可以查看该主机的详细信息
* git remote add <主机名> <网址> 用于添加远程主机
* git remote rm <主机名> 删除远程主机
* git remote rename <原主机名> <新主机名>
此笔记在学习廖雪峰Git教程进行的记录。见http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000