更新时间 2019-08-22
git基本使用
声明:为方便描述:A,B,C都代表“分支”或者说“仓库”的名字
声明:gitAddress 代表git地址
(例如:https://github.com/dacaoyuan/SlidingMenu.git)
几个专用名词的译名:
- Workspace : 工作区
- Index / Stage : 暂存区
- Repository : 本地仓库
- Remote : 远程仓库
1.新建代码库
-
git init 创建本地仓库
-
git remote add origin gitAddress 本地库“关联”远程库
-
git remote remove origin 取消本地目录下关联的远程库
-
git clone gitAddress 从远程仓库克隆项目代码
-
git clone -b C gitAddress 从远程仓库克隆“指定分支C”上的代码
2.增加/删除文件
- git add [file] 将指定文件添加到暂存区
- git add . 添加当前目录下所有文件
- git add -p 添加每个变化前,都会要求确认;对于同一个文件的多处变化,可以实现分次提交
- git add -u 暂存修改的和删除的文件,不包括新增加的文件。
- git add -A 暂存所有的文件,包括新增加的、修改的和删除的文件。
- git rm [file1] [file2] … 删除工作区文件,并且将这次删除放入暂存区
- git rm --cached [file1 [file2] (说法1:删除本地仓储文件,但不会删除文件);(说法2:停止追踪指定文件,但该文件会保留在工作区)
- git mv [file-original] [file-renamed] 改名文件,兵器将这个改名放入暂存区
3.代码提交
- git commit -m “first commit” 提交暂存区到仓库区
- git commit [file1] [file2] … -m [message] 提交暂存区的指定文件到仓库区
- git commit -a 提交工作区自上次commit之后的变化,直接到仓库区
- git commit -v 提交时显示所有diff信息
- git commit --amend [file1] [file2] … 重做上一次的commit,并包括指定文件的新变化
- git commit --amend -m [message] 使用一次新的commit,代替上一次提交;如果代码没有任何新变化,则用来改写上一次commit的提交信息
4.分支
-
git branch A 创建分支
-
git checkout -b A 创建分支A,并且切换到A分支上
-
git checkout B 切换到B分支上
-
git branch -a 查看所有本地分支和远程分支
-
git merge B 合并指定分支B到当前分支
-
git branch -d B 删除分支
-
git branch -D B 删除分支
-
git push origin --delete B 删除远程分支B
-
git branch -dr [remote / branch] 也是删除远程分支
-
git push origin 本地分支A:远程分支A 将本地分支push到远程分支 ,并且命名远程分支的名字为A
-
git fetch origin 同步远程仓库
-
git push -u origin master 关联后,使用该命令第一次推送 master 分支的所有内容,后续再推送的时候就可以省略后面三个参数了,其中参数 u 代表上游(upstream)的意思。
5.撤销
一:
1.git checkout [file] 恢复暂存区的指定文件到工作区
2:在还没有add,的时候
git checkout 那个路径下的文件夹或者文件名。(就能撤销未添加的修改)
3:如果已经add过的文件:
git reset HEAD 那个路径下的文件夹或者文件名。(就能回到未添加的状态)
然后在用 1 中的方法撤销修改。
注意:如果你把某个文件删除了,或者是新添加的文件,都不会再恢复或者去掉,但是会把文件中的添加的代码去掉。
4.如果已经commit过的文件:
git reset --hard HEAD^ 那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset --hard HEAD~100 即可。
不过还有一种比较实用的方法:
git reset --hard [你要回退的版本号] 这样就能直接回退到你指定的那一次提交。
例如:git reset --hard 852782f
5:可获取到每次提交的版本号
git reflog
6: git reset --soft origin/dev
//git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;
git reset --soft origin/dev
二.已经push
粗暴的方法:(只需两行命令)
git reset --hard 1243ad3(commit唯一标识) 或者 git checkout (commit唯一标识 前7位)
git push origin HEAD --force (强行push)
6.删除
git branch -D A 删除分支A
rm fileName 删除文件
7.配置
git config – list 显示当前的git配置
git config -e [–global]编辑git配置文件
设置提交代码时的用户信息
git config --global user.name “username”
git config --global user.email “email”
8.设置代理
设置方法一(推荐)
打开 Git Bash,使用命令临时设定http代理:
git config --global http.proxy 'http://127.0.0.1:7890'
临时设定socks代理
git config --global http.proxy 'socks5://127.0.0.1:socks5端口号'
查看当前的 Git 代理设置
git config --global --get http.proxy
git config --global --get https.proxy
取消 Git 代理设置
git config --global --unset http.proxy
git config --global --unset https.proxy
设置方法二
若想要设置代理永久生效,则可以把它写入 .gitconfig 文件中。
使用 vi 打开 .gitconfig 文件:
vi ~/.gitconfig
写入下列配置(建议在最末写入):
[http]
proxy = socks5://127.0.0.1:socks5端口号
proxy = http://127.0.0.1:http端口号
修改后重启 git ,使配置生效:
git config -l --global
查看当前代理:
git config -l
9.其他
git status 查看当前提交(commit)状态,例如:文件有没有被修改过
git diff [可选]fileName 查看具体修改了什么
git log 查看下历史记录
git show 查看最后一个 commit 的修改。
1.git push origin A 将代码push到A远程仓库中
(例如:git push origin matser 将代码push到master远程仓库中)
2.git pull gitAddress origin A 将远程仓库A中的代码,拉取到本地仓库中
在本地目录下找到.git文件
[root@test01 H2_20151112]# ls -a
. … .git .gitignore H2
删除 .git
[root@test01 H2_20151112]# rm -rf .git
git rm #删除文件
git rm filename
git mv #修改文件名,或搬移目录
git mv filename newfilename
配置了.gitignore 之后,配置不生效,提交代码还是不能忽略?
原因是 .gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:
可以将本地代码通过git 提交,然后使用以下命令即可:
git rm -r --cached .
git add .
git commit -m ‘update ignore’
注意:命令行结尾的点(.)
这样之后,你可直接将代码push到远程分支。push 的时候,显示感觉还会将忽略的文件提交,放心,实际是不会的。
常见问题:
(1):提交代码或pull 代码时,把如下的错误:
fatal: Unable to create ‘XXXXXX/.git/index.lock’: File exists.
解决办法:
找到index.lock 删除即可,例如:rm -f XXXXXX/.git/index.lock
(2)push 代码时,提示如下错误:
fatal: unable to access ‘https://gitee.com/dacaoyuan/AliplayDemo470.git/’: Failed to connect to 127.0.0.1 port 9666: Connection refused
解决办法:很有可能是你不知道的情况下或者自己设置了 http://127.0.0.1:9666 这个代理了。
查询是否使用了代理:
git config --global http.proxy
取消代理
git config --global --unset http.proxy
取消之后,可再次push代码试试!
这是一篇对 git 再详细不过的完全剖析,如果你没有一点基础,可以从这里开始学习: