0、我常用的.gitconfig
注意:是在终端里运行下面语句,而不是直接将下面内容直接写道.gitconfig文件里,使用 git config --list 可以查看 执行的结果
git config --global user.name "你名字"
git config --global user.email "你邮箱"
git config --global core.editor vim
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
终端显示git分支:
# Git branch in prompt. parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* (.*)/ (1)/' } export PS1="u@h W[ 33[32m]$(parse_git_branch)[ 33[00m] $ "
常用命令
修改本地记录的远程仓库地址
git remote set-url origin gitl@gitxxxxxx
设置仓库的upstream
git remote add upstream git@gitxxxxxx
git pull upstream master
git 中upstream和origin的区别
https://blog.csdn.net/liuchaoxuan/article/details/80656145
1、git init:初始化一个Git仓库。
补充:
git init --bare <仓库名字>建立一个空的数据库。
2、添加文件到Git仓库,分两步:
第一步,使用命令git add <filename>,注意,可反复多次使用,添加多个文件;
第二部,使用命令git commit -m "提交说明",完成。
补充:
git add .:把当前工作区中的所有修改全部添加到暂存区中。
git commit -a:直接将工作区中的修改添加到版本库中。(相当于先执行了git add,再执行git commit。)
"git commit -a"对新添加的文件,删除文件等修改不起作用,要显示的执行git add/git rm命令
3、git status:打印整个工作区的状态。
4、git diff <filename>:查看修改内容。
补充:
git diff HEAD -- filename:查看工作区和本地版本库中最新版本的区别,有关filename的区别
git diff "@{yesterday}":与昨天的版本库相比。
git diff <commit-id> "@{2}":特定版本与倒数第二个版本相比。
5、git log:查看系统中的历史commit提交记录
如:git log 或git log --pretty=oneline
其中pretty指定打印提交记录内容的格式,可选的值有:oneline,short,medium,full,fuller,email,raw和一些自定义的字符格式。
补充:
--graph可以看到分支合并图。
--abbrev-commit打印简短commit-id。
6、git reset --hard <commit_id>:将head的值设定为指定的commit_id,
HEAD表示当前版本id,
HEAD^表示上一个版本id,
HEAD^^表示上上一个版本id,
HEAD~100表示上上100个版本id,
版本id也可以在git log命令中查看,commit就是。
补充:
git reset:恢复到之前的版本。
--mixed 是git reset的默认选项,他的作用是重置索引内容,将其定位到指定的项目版本,而不改变你的工作树中的所有内容,只是提示你有哪些文件还没更新。
--soft 选项即不触动索引的位置,也不改变工作数中的任何内容。该选项会保留你的工作树中的所有更新并使之处于待提交状态,相当于在 --mixed基础上加上git add。
--hard 把整个目录还原到一个版本,包括所有文件。
7、git reflog:记录你的每一次有关head的历史命令记录
8、工作区(Working Directory):就是当前的工作目录。
版本库(Repository):工作区下的隐藏目录.git。
暂存区(stage):版本库中的index(或者是stage)文件。
git add命令就是把文件修改添加到暂存区(stage)中;
git commit命令就是把暂存区的所有内容提交到当前分支中。(如下图)
9、git checkout -- <filename>:把工作区中对filename文件的修改撤销掉
这里有两种情况:
一种是修改后还没放到暂存区(即:还没有使用git add命令),现在撤销修改就是回到和版本库一模一样的状态;
一种是已经添加到暂存区后,又作了修改,现在撤销修改就是回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态
补充:
git checkout <name>:切换到相应的分支上。
10、git reset HEAD <filename>:把暂存区中对filename的修改撤销掉(此步是把修改从暂存区撤销到工作区,要想撤销工作区的修改,要进一步的使用git checkout -- <filename>命令)
如果修改已经提交到版本库中了,在没有把本地版本推送到远程的情况下可以使用git reset --hard <commit_id>命令进行版本回退了。
(使用的默认选项:--mixed)
补充:
关于git reset详见第6条。
关于第9条中的“git checkout -- <filename>”与第10条“git reset HEAD <filename>”的区别的说明:
git checkout
--<filename>针对的是撤销工作区的修改,如果此时暂存区有filename文件,就撤销为暂存区中的filename,如果暂存
区中没有filename文件,就恢复为本地版本库中的filename,此命令不更改暂存区和本地版本库。git reset HEAD --
<filename>命令针对的是撤销暂存区中的修改,是将暂存区中的内容恢复到工作区,相当于git add
<filename>的逆操作一样。
11、git rm <filename>:在暂存区记录下要删除文件filename,使用git commit命令提交删除申请,从版本库中删除文件。
12、ssh-keygen -t rsa -C "youremail@example.com":使用自己的邮件在用户主目录下生成SSH key。(要在主目录下运行此命令)
-t 指定加密方式,可以值有:rsa、dsa,默认为:dsa
-C是添加注解comment,可以不是自己的邮件,也可以不要此项。
13、git remote add origin git@github.com:<github用户名>/<仓库名>.git 将本地仓库与github上的仓库关联起来。
origin为远程库的名字。
此命令的前提是本地仓库和远程仓库都已经建立好了,命令的作用是将两者关联,并不新建什么!
14、git push -u origin master:将本地库的所有内容推送到远程库上。(只有第一次推送的时候才加上-u)
15、git config --global user.name "用户名":配置缺省的用户名。
16、git config --global user.email "":配置缺省的email,最好和注册时使用一样的email。
补充:配置文件在~/.gitconfig
17、git clone git@github.com:<用户名>/<仓库名>.git:从远程库中克隆版本库到本地。
补充:
git clone . /some/new/directory:将当前目录下的版本库克隆到新的目录下。
git clone git@github.com:<用户名>/<仓库名>.git /some_other_path/<仓库名> -o o
“/some_other_path/<仓库名>”可以不写默认放到当前目录下的仓库名文件夹里,
“-o o”重命名远程仓库的别名,默认是origin
18、git branch:查看分支。
补充:
git branch --set-upstream branch-name origin/branch-name:创建本机分支与远程分支的链接关系。
git branch --set-upstream-to=o/server_side_branch_name your_branch_name
19、git branch <name>:创建分支name。
20、git checkout <name>:切换到分支name。
补充:
git checkout
<commit-id>:这个操作将你带回过去,同时保存较新提交。(有点像进入了一个过去时间点,切把这个时间点当作一个新的分支;其实就
是新建了一个未命名的分支,使用git checkout -b来命名和保存)
git checkout "@{10 minutes age}":切换到十分钟前的版本(commit-id)
git checkout "@{5}":切换到倒数第5个commit-id。
21、git checkout -b <name>:创建并切换到分支name。
补充:
相当于git branch <name>和git checkout <name>两条命令的效果。
git checkout -b <name> origin/<name>创建远程origin的name分支到本地。
22、git merge <name>:合并name分支到当前分支中。
如果合并的时候产生了冲突,git会告诉我们在哪个文件上产生了冲突(git status也会告诉我们冲突的文件),必须手动解决冲突后在提交。
补充:
git merge --no-ff -m "描述信息" branchname
--no-ff参数表示禁止使用Fast forward模式合并,应为本次合并要创建一个新的commit,所以要加入-m,将commit描写写进去。
23、git branch -d <name>:删除分支name。
补充:
git branch -D <name>:强行删除那么分支。当一个分支没有被合并过,但是想删除时就会用到这个命令。
git branch -m [<oldbranch>] <newbranch>:移动或重命名一个分支。
24、git stash:把当前工作现场储藏到工作栈中(入栈操作)。
补充:
暂存区和工作区中未被添加到本地版本库中的修改,并不属于某一个分支,当你切换一个分支后,使用git status查看发现这些未保持的修改还在,所以出现了git stash命令,来保持这些不想提交的修改。
现在你在br1分支中新建一个test文件,并且使用git add
test命令将其添加到暂存区中,此时你切换到br2分支中,使用git status查看的结果和在br1分支中使用git
status的结果一样,再br2分支中使用git commit -m
"XXX"命令将暂存区中的内容提交到版本库中,test文件就属于br2了,切换到br1后你就找不到test文件的任何信息了。
25、git stash list:查看储藏工作现场的栈里的内容。
26、git stash apply stash@{n}:将工作栈中的第n个工作现场回复出来。
27、git stash drop:删除工作栈中第一个工作现场。
28、git stash pop:回复工作现场的同时把相应的内容从工作栈中删除。(出栈操作)。
29、git remote:查看远程库信息。
-v:查看远程库详细信息,其中fetch是抓取地址;push是推送地址。
30、git pull:把别人最新的提交从远程上抓取下来。
从服务器下载数据库,并跟自己的数据库合并。
git fetch:从服务器下载数据库,并放到新的分支,不和自己的数据库合并。
补充:
git pull /the/other/clone:从另一个克隆抓取更新。
git pull 相当与git fetch 和git merge orign/<branch>
31、git tag <name> [commit-id]:在commit-id处创建一个标签,commit-id默认为HEAD。
-a tagname -m "blablabla...":指定标签信息。
-s tagname -m "blablabla..." :可以使用PGP签名标签。
32、git tag:查看所有标签。
33、git show <tagname>:查看标签详细信息。
34、git tag -d <tagname>:删除本地标签。
35、git push origin :refs/tags/tagname:删除一个远程标签。
36、git push origin origin tagname:推送标签到远程。
37、git push origin --tags:推送全部标签到远程。
38、.gitignore文件:忽略特殊文件,https://github.com/github/gitignore。
39、git whatchanged:
40、git mv:重命名文件或者文件夹。(git mv oldfile newfile)
41、git revert <commit -id>:将还原特定哈希值的提交。(即撤销此步的提交)
42、git cherry-pick <commit-id>:??
43、git rebase -i HEAD~10:重新修改提交日记。
44、git blame <file>:列出文件的修改历史记录。
主要参考:廖雪峰blog