git 安装
windows 安装
linux安装
sudo apt-get install git
git 基本操作
git 配置文件
分别有三个,优先级由高到低分别是
文档库所在文件夹中 .git 子文件夹内的 config 文件
git config user.name ‘name’
git config user.email ‘emailaddress’
登录账号的 home directory 中的 .gitconfig 文件,此配置文件只对此账号登录的用户有效
git config –global user.name ‘name’
git config –global user.email ‘emailaddress’
Git 安装文件夹的 etc\gitconfig 文件
git config –system user.name ‘name’
git config –system user.email ‘emailaddress’
创建仓库
git init
git clone 远程仓库
git clone = git init(创建本地存储库)
git remote add(将URL添加到该存储库)
git fetch(从该URL中获取所有分支到本地存储库)
git checkout(创建工作树中主分支的所有文件)
提交修改
git add
git add file1 file2 把当前文件加入到暂存区
git commit -m/–amend
–amend 修改git提交记录
有时你提交过代码之后,发现一个地方改错了,你下次提交时不想保留上一次的记录;或者你上一次的commit message的描述有误,这时候你可以使用接下来的这个命令:git commit --amend。
注意:该操作会改变你原来的commit id
如何修改任意一次提交记录的commit 注释说明?
git status
git checkout
git rm
git mv
git diff
git reset
git merge
日志
git log
git log --graph --oneline --all --decorate
–graph: commit 节点的演进图
–oneline: 精简的方式显示
–all: 显示所有分支
–decorate:标识分支的名称
git blame filename
远程操作
git fetch
git pull
git push
git remote
$ git remote
origin
$ git remote -v
origin git@github.com:tianqixin/runoob-git-test.git (fetch)
origin git@github.com:tianqixin/runoob-git-test.git (push)
git remote add
撤销提交
删除文件
先删除
git rm -rf 文件名
再提交
Git commit -m 备注
Git
分支管理
创建分支
创建本地分支
git checkout -b dev 创建dev分支并切换到dev分支
git branch dev2 创建一个叫dev2的分支,不切换
创建本地分支同步到远程仓库,github 上会自动新建与本地同名的分支
git push origin dev1
将本地分支代码同步到远端dev1 分支。
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (master)
$ git checkout -b dev1
Switched to a new branch 'dev1'
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (dev1)
$ ls
README.md test.txt
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (dev1)
$ touch test1.txt
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (dev1)
$ echo "test dev1 branch">test1.txt
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (dev1)
$ ls
README.md test.txt test1.txt
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (dev1)
$ git add .
warning: LF will be replaced by CRLF in test1.txt.
The file will have its original line endings in your working directory.
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (dev1)
$ git commit -m "test"
[dev1 0081f69] test
1 file changed, 1 insertion(+)
create mode 100644 test1.txt
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (dev1)
$ git push origin dev1
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 308 bytes | 308.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'dev1' on GitHub by visiting:
remote: https://github.com/echoyzt/testproject/pull/new/dev1
remote:
To github.com:echoyzt/testproject.git
* [new branch] dev1 -> dev1
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (dev1)
$ ls
README.md test.txt test1.txt
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (dev1)
$ git branch -a
* dev1
master
remotes/origin/dev1
remotes/origin/master
切换分支
git checkout 分支名
删除分支
删除本地分支
git branch -d issue001 删除issue001分支
删除远程仓库的分支
git push origin --delete dev1
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (master)
$ git branch -a
* master
remotes/origin/dev1
remotes/origin/dev2
remotes/origin/master
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (master)
$ git push origin --delete dev1
To github.com:echoyzt/testproject.git
- [deleted] dev1
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (master)
$ git branch -a
* master
remotes/origin/dev2
remotes/origin/master
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (master)
$ git push origin --delete dev2
To github.com:echoyzt/testproject.git
- [deleted] dev2
yuzt@SHJQZD210218L MINGW64 /d/gitRepo/testdir (master)
$ git branch -a
* master
remotes/origin/master
合并分支
git merge dev 合并分支
合并分支时,加上 --no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
清除无效的远程追踪分支
git remote prune
版本回退
git reset --hard HEAD^ (回退到上一个版本)
或者 git reset --hard HEAD~ 回退到上一个版本
(如果想回退到100个版本,使用git reset --hard HEAD~100 )
git reset --hard id (回滚到指定id 版本)
git push -f origin 分支名
git 标签
git 标签使用场景
git tag -a V1.2 -m ‘release 1.2’
-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加标签的注解。
tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起
显示所有tag
git tag
删除tag
git tag -d v1.1
显示详细信息
git show v1.0
获取远程版本
git fetch origin tag V1.2
git 使用场景
单枪匹马
git init
git status
git add 文件名
git add .
git commit -m ‘提交信息’
git 使用常见场景错误解决
1.non-fast-forward
push远程仓库时经常报出下面的错误,导致操作失败
Git 已经提示我们,先用 git pull 把最新的内容从远程分支(origin/master)拉下来,然后在本地 merge,解决 conflict,再 push。
git pull origin master
2.fatal: refusing to merge unrelated histories
refusing to merge unrelated histories
此项错误是由于本地仓库和远程有不同的开始点,也就是两个仓库没有共同的 commit历史出现的无法提交
$git pull origin master --allow-unrelated-histories
$ git push -u origin master
3 git reset --hard id 报错unlink of file
在操作git中有时候会提示 Unlink of file ‘…’ failed. Should I try again?
原因是你工作目录有某些文件正在被程序使用,
解决方案不是简单的选择y或者n,而是关闭IDE,让IDE把这些文件释放掉。