git常用命令

一、Git 配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
1.git config --global
使用 git config 时用 --global 选项,配置文件只适用于该用户。
(--system 选项,对所有用户都普遍适用的配置)
git config --global user.name "runoob" git config --global user.email test@runoob.com

  1. git config --list
    要检查已有的配置信息,可以使用 git config --list 命令

二、git操作

1.git init 使用当前目录作为Git仓库,我们只需使它初始化。
2.git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。
3.git add 命令可将该文件添加到缓存
4.git status 查看在你上次提交之后是否有修改。加 -s 参数,以获得简短的结果输出。
5.git diff 查看执行 git status 的结果的详细信息。
6.git commit 将缓存区内容添加到仓库中
如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。
git commit -am "message example"
7.git reset HEAD 命令用于取消已缓存的内容
简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。
8.git rm 从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm -f <file>
如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中
git rm --cached <file
9.检出或clone指定分支或版本
在 Git 中从当前分支创建并检出新分支的命令是
git checkout -b name-of-new-branch

Git 的每个提交都有一个 SHA1 散列值(Hash 值)作为 ID。获取指定历史版本代码。
git checkout 169d2dc

Git clone 某个分支
git clone -b 分支名仓库地址
git clone [options] [--] <repo> [<dir>]
git clone到指定目录/文件夹geek
git clone git@github.com:gk/git-recipes.git geek
三、分支管理
1.git branch (branchname) 创建分支命令
没有参数时,git branch 会列出你在本地的分支。
2.git checkout (branchname) 切换分支命令
git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下,从而在该分支中操作。
3.git branch -d (branchname) 删除分支
4.git merge 合并回到你的主分支。
5.git checkout
当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
四、git撤销
git reset [<mode>] [<commit>]
This form resets the current branch head to <commit> and possibly updates the index (resetting it to the tree of <commit>) and the working tree depending on <mode>. If <mode> is omitted, defaults to "--mixed". The <mode> must be one of the following:
此操作将当前分支头重置为<commit>,并可能更新索引(将其重置为<commit>的树),并根据<mode>更新工作树。 如果省略<mode>,则默认为“--mixed”。 <mode>必须是以下之一:

--soft
Does not touch the index file or the working tree at all (but resets the head to <commit>, just like all modes do). This leaves all your changed files "Changes to be committed", as git status would put it.
不更改索引文件或工作树(但将头重置为<commit>,就像所有模式一样)。 这会将所有更改的文件“更改提交”,这样git状态会将其放入。
--mixed
Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports what has not been updated. This is the default action.
重置索引而不是工作树(也就是说保留更改的文件但未标记为提交)并报告尚未更新的内容。 这是默认操作。
If -N is specified, removed paths are marked as intent-to-add (see git-add[1]).

--hard
Resets the index and working tree. Any changes to tracked files in the working tree since <commit> are discarded.
重置索引和工作树。 放弃自<commit>以来对工作树中跟踪文件的任何更改。
--merge
Resets the index and updates the files in the working tree that are different between <commit> and HEAD, but keeps those which are different between the index and working tree (i.e. which have changes which have not been added). If a file that is different between <commit> and the index has unstaged changes, reset is aborted.
重置索引并更新工作树中<commit>和HEAD之间不同的文件,但保留索引和工作树之间不同的文件(即没有添加更改的文件)。 如果<commit>和索引之间的文件有未缓存的变化,则重置会中止。
In other words, --merge does something like a git read-tree -u -m <commit>, but carries forward unmerged index entries.

--keep
Resets index entries and updates files in the working tree that are different between <commit> and HEAD. If a file that is different between <commit> and HEAD has local changes, reset is aborted.
重置索引条目并更新工作树中<commit>和HEAD之间不同的文件。 如果<commit>和HEAD之间的文件有本地更改,则重置会中止。
If you want to undo a commit other than the latest on a branch, git-revert[1] is your friend.
五、问题
1.git怎么撤销 merge

方法一,reset 到 merge 前的版本,然后再重做接下来的操作,要求每个合作者都晓得怎么将本地的 HEAD 都回滚回去:
git checkout 【行merge操作时所在的分支】 git reset --hard 【merge前的版本号】

方法二,当 merge 以后还有别的操作和改动时,git 正好也有办法能撤销 merge,用 git revert:
$ git revert -m 【要撤销的那条merge线的编号,从1开始计算(怎么看哪条线是几啊?)】 【merge前的版本号】
2.git pull和fetch的区别? //todo

本地仓库的回退(撤销本地的commit): git reset:

reset命令有3种方式:

git reset --mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息git
reset --soft HEAD^:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset --hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容

要删除所有工作目录下面的修改, 包括新添加的文件. 假设你已经提交了一些快照了, 而且做了一些新的开发.
git reset --hard
git clean -df

git fetch origin //取回所有分支(branch)的更新
git pull origin master:master //本地分支master更新
git push origin invite //将本地invite分支推送到远程 -f 参数强制push,本地版本低于远程版本时这个参数很有用

git fetch origin每次弹出对话框
Git Credential Manager for Windows
升级git就好了。

六、常用命令补充

  1. git fetch <远程主机名>
    默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。
    git fetch <远程主机名> <分支名>
    git fetch origin master 取回origin主机的master分支。

  2. git pull <远程主机名> <远程分支名>:<本地分支名>
    git pull origin next:master 取回origin主机的next分支,与本地的master分支合并
    如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
    git pull origin next
    上述命令等同于
    git fetch origin git merge origin/next

3.git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master
如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

4.git修改远程仓库地址
直接修改
git remote set-url origin [url]
先删后加
git remote rm origin
git remote add origin [url]
参考:http://www.ruanyifeng.com/blog/2014/06/git_remote.html

问题:Git - fatal: Unable to create '/path/my_project/.git/index.lock': File exists

Git - fatal: Unable to create '/path/my_project/.git/index.lock': File exists

删除rm -f .git/index.lock

问题:git clone 切换tag
git clone will give you the whole repository. After the clone, you can list the tags with git tag -l and then checkout a specific tag:

$ git checkout tags/<tag_name>
Even better, checkout and create a branch (otherwise you will be on a branch named after the revision number of tag):

$ git checkout tags/<tag_name> -b <branch_name>
比如:git clone git@github.com:sass/node-sass.git
git checkout tags/v3.8.0

git 报错 ! [remote rejected] master -> master (pre-receive hook declined)

GitLab 分支的protected权限关闭
参考:https://blog.csdn.net/zyx1303031629/article/details/80508858

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容