阿左的小站 2019-09-08
作者:LogM
git clone <版本库的网址> git clone <版本库的网址> <本地目录名> # 克隆版本库的时候,所使用的远程主机自动被git命名为origin # 使用-o修改远程主机名 git clone -o <远程主机名> <版本库的网址>
# 查看历史的每一次操作 git reflog # 查看历史commit git log git log --oneline # 查看commit的修改 git show <commit_id> git show --stat <commit_id> git show <commit_id> <filename> # 查看两个分支的差异 git diff <branch1> <branch2> git diff --stat <branch1> <branch2> # 查看某个文件的改动,还未add git diff <filename> # 查看已经add的文件相比上一次commit有哪些改动 git diff --cached
# 列出所有的远程主机名 git remote # 参看远程主机的网址 git remote -v # 查看主机的详细配置 git remote show <主机名> # 添加远程主机 git remote add <主机名> <网址> # 删除远程主机 git remote rm <主机名> # 远程主机改名 git remote rename <原主机名> <新主机名>
# 将远程主机新的更新取回本地,默认取回所有branch的更新 # 它取回的代码对你本地的开发代码没有影响(只是让 `git branch -a` 显示出远程新增的branch,不修改本地代码) git fetch <远程主机名> # 取回远程主机的特定branch git fetch <远程主机名> <分支名> # 查看远程分支 git branch -r # 查看所有分支 git branch -a # 在origin/master的基础上,新建本地分支 git checkout -b newBrach origin/master # 相当于执行 git branch newBrach git checkout newBrach # 查看跟踪关系 git branch -vv # 手动建立追踪关系 git branch --set-upstream-to=origin/remoteBranch localBranch # 删除本地分支 git branch -d <BranchName>
# 取回远程主机某个分支的更新,再与本地的指定分支合并 # 实质上,这等同于先做git fetch,再做git merge git pull <远程主机名> <远程分支名>:<本地分支名> # 采用rebase模式,可以使用--rebase选项 git pull --rebase <远程主机名> <远程分支名>:<本地分支名> # 如果远程分支是与当前分支合并,则冒号后面的部分可以省略 git pull <远程主机名> <远程分支名> # 如果本地的当前分支在远程主机上已经有追踪关系的分支,可以省略分支名 git pull <远程主机名> # 如果只有一个追踪的分支,则可以省略主机名 git pull # 如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支 # 加上参数 -p 就会在本地删除远程已经删除的分支 git pull -p # 等同于 git fetch --prune origin git fetch -p
# 将本地分支的更新,推送到远程主机 git push <远程主机名> <本地分支名>:<远程分支名> # 如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支,如果该远程分支不存在,则会被新建 git push origin master # 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支 git push origin :master # 等同于 git push origin --delete master # 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略 git push origin # 如果当前分支只有一个追踪分支,那么主机名都可以省略 git push # 还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用--all选项 git push --all origin # 如果远程主机的版本比本地版本更新,推送时Git会报错,应当先pull合并代码。如果你一定要推送,可以使用--force选项 git push --force origin # git push不会推送标签(tag),除非使用--tags选项 git push origin --tags
# 文件被修改了,但未执行git add操作 git checkout fileName # 同时对多个文件执行了git add操作,但本次只想提交其中一部分文件 # 取消暂存 git reset HEAD <filename> # 文件执行了git add操作,但想撤销对其的修改 # 取消暂存 git reset HEAD fileName # 撤销修改 git checkout fileName # 修改的文件已被git commit,但想再次修改不再产生新的Commit # 修改最后一次提交 $ git add fileName $ git commit --amend -m"说明" # 已在本地进行了多次git commit操作,现在想撤销到其中某次Commit git reset [--hard|soft|mixed|merge|keep] [commit|HEAD] # hard:重设index和working directory,从<commit>以来在working directory中的任何改变都被丢弃,并把HEAD指向<commit> # soft:index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。自从<commit>以来的所有改变都会显示在git status的“Changes to be committed”中 # mixed:仅重设index,但是不重设working directory。这个模式是默认模式,即当不显示告知git reset模式时,会使用mixed模式。这个模式的效果是,working directory中文件的修改都会被保留,不会丢弃,但是也不会被标记成“Changes to be committed”,但是会打出什么还未被更新的报告 # 将本地的状态回退到和远程一样 git reset --hard origin/devlop # revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在; # reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。