一、Git 配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
1.git config --global
使用 git config 时用 --global 选项,配置文件只适用于该用户。
(--system 选项,对所有用户都普遍适用的配置)
git config --global user.email test@runoob.com
- 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 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就好了。
六、常用命令补充
git fetch <远程主机名>
默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。
git fetch <远程主机名> <分支名>
git fetch origin master 取回origin主机的master分支。git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin next:master 取回origin主机的next分支,与本地的master分支合并
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin next
上述命令等同于
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 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