仓库,就是你存在.git目录的那个文件夹内的所有文件,包括隐藏的文件,Git程序会再当前目录以及上级目录查找是否存在.git文件,如果存在,则会将.git目录存在的文件夹开始下的所有文件当成你需要管理的文件
分支功能解决了正在开发的版本与上线版本稳定性冲突的问题在Git使用过程中,我们的默认分支一般是Master,当然,这是可以修改的,我们在Master完成一次开发,生成了一个稳定版本,那么当我们需要添加新功能或者做修改时,只需要新建一个分支,然后在该分支上开发,完成后合并到主分支即可
同步,也可以称之为拉取,在Git中是非常频繁的操作,和SVN不同,Git的所有仓库之间是平等的,所以,为了保证代码一致性,尽可能的在每次操作前进行一次同步操作,具体的为在工作目录下执行如下命令:
git pull origin master
暂存只是针对你最后一次改动而言,即针对当前所在的版本的所有改动都算
将当前改动暂存起来:
git stash
恢复最后一次暂存的改动
git stash pop
查看有多少暂存
git stash list
合并这个命令通常情况下是用于两个分支的合并,一般用于本地分支,远程分支多用Pull命令,该命令的功能是将待合并分支与目标分支合并在一起,注意,这个命令只会合并当前版本之前的差异,两个分支的提交历史会根据提交时间重新组织索引,故只可能会产生一次冲突但是会生成一个提交,如果你不想生成这次提交,加上 --base参数即可
不会复制粘贴怎么学
快捷键 | 功能 |
---|---|
复制 | ctrl+shift+C或Ctrl+insert |
粘贴 | ctrl+shift+S或Shift+insert |
快捷键 | 功能 |
---|---|
ctrl+a | 跳转至行首 |
ctrl+e | 跳转至行尾 |
ctrl+x | 行首/当前位置光标跳转 |
快捷键 | 功能 |
---|---|
alt+. | 粘帖上一次命令最后的参数 |
ctrl+w | 删除光标左侧单词 |
alt+d | 删除光标右侧单词 |
ctrl+u | 删除光标左侧所有字符 |
ctrl+k | 删除光标右侧所有字符 |
ctrl+l | 清屏 |
快捷键 | 功能 |
---|---|
ctrl+n | 下一条命令 |
ctrl+p | 上一条命令 |
shift+PageUp | 向上翻页 |
shift+PageDown | 向下翻页 |
ctrl+r | 查找命令历史记录,输入keyword多次ctrl+r可返回下一个匹配项 |
快捷键 | 功能 |
---|---|
touch | 新建文件 |
mkdir | 新建目录 |
rm | 删除文件 |
rm -r | 删除文件夹(recusive) |
mv | 移动文件 |
ls | 列出文件 |
pwd | 打印工作目录 |
cd | 改变目录 |
reset | 清屏 |
git config --global user.name newname
git config --global user.email email
设置全局的username和email,newname和email就填自己的用户名和密码(推荐和github或者gitee一致)
然后创建仓库,这里提供个gitee的创建方法https://gitee.com/help/articles/4120
gitee仓库设置公钥
用git通过SSH协议commit代码到GitHub
gitee生成/添加ssh公钥
github添加ssh公钥
在需要输入passphrase时直接回车,就是不设置密码
参考Git 工具 - 凭证存储,比较难懂
设置一个 “credential cache”。 最简单的方式就是将其保存在内存中几分钟,可以简单地运行
$ git config --global credential.helper cache
来设置它。
注意git bash要在代码所在文件夹下打开,要不然就cd过去
此处我们以用户账号下命名为 HelloGitee 的仓库为例。对应的仓库地址为:https://gitee.com/用户个性地址/HelloGitee.git,在实际实践中,你可以将用户个性地址替换为自己的地址。
$ git clone https://gitee.com/用户个性地址/HelloGitee.git #将远程仓库克隆到本地
在克隆过程中,如果仓库是一个私有仓库,将会要求用户输入 Gitee 的账号和密码
注意:“origin” 并无特殊含义
远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样。 “master” 是当你运行 git init 时默认的起始分支名字,原因仅仅是它的广泛使用, “origin” 是当你运行 git clone 时默认的远程仓库名字。 如果你运行 git clone -o booyah
,那么你默认的远程分支名字将会是 booyah/master
$ git add . #将当前目录所有文件添加到git暂存区
$ git commit -m "my first commit" #提交并备注提交信息
$ git push origin master:master #将本地的master提交推送到远程仓库origin的master分支
初始化
$ git init #初始化本地仓库
将一个远程仓库添加到本地的仓库当中
$ git remote add origin https://gitee.com/用户个性地址/HelloGitee.git #之后origin相当于这个url的“别名”,可以用origin来代替整个url
查看当前仓库对应的远程仓库地址
$ git remote -v
$ git pull origin master #origin是仓库默认名,后面可修改
添加文件到版本控制暂存区
$ git add . #这里add后面是文件名,一个点代表add目录下所有文件进版本控制
$ git add -A #和上面一样可以提交当前仓库的所有改动。
$ git add *.c #也可使用通配符,代表所有.c文件
查看仓库当前文件提交状态(A:提交成功;AM:文件在添加到缓存之后又有改动)
$ git status -s #查看仓库当前文件提交状态
从暂存区提交版本到仓库,-m后面是本次提交的备注
$ git commit -m "第一次提交"
将本地git仓库信息上传到服务器(下面两个都可)
$ git push https://gitee.com/***/test.git
$ git push origin master
查看git提交的日志,相关文档Git 基础 - 查看提交历史
$ git log
在新建仓库时,如果在 Gitee 平台仓库上已经存在 readme 或其他文件,在提交时可能会存在冲突,这时用户需要选择的是保留线上的文件或者舍弃线上的文件,如果您舍弃线上的文件,则在推送时选择强制推送,强制推送需要执行下面的命令(默认不推荐该行为):
$ git push origin master -f
如果选择保留线上的 readme 文件,则需要先执行:
$ git pull origin master
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交:
$ git commit --amend
这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令), 那么快照会保持不变,而你所修改的只是提交信息。
编辑后保存会覆盖原来的提交信息。
如果你提交后发现忘记了暂存某些需要的修改,可以:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
变基相关原理和操作可查看git分支
找到那个merge的commitId
git log
git rebase -i commitID
将这个commitID改为id
如果冲突,先解决然后 git rebase --continue
如果想撤销整个操作 git rebase --abort
多人协作时,不要用变基,commit 会造成混乱,出现很多两次的commit 信息
git revert -m 1 commitId
此处我们以用户账号gitee下命名为 HelloGitee 的仓库为例。对应的仓库地址为:https://gitee.com/gitee/HelloGitee.git。在用户具备访问项目仓库代码权限的前提下,通过本地命令行执行git clone仓库地址即可克隆仓库到本地。
$ git clone https://gitee.com/gitee/HelloGitee.git #通过https协议将远程仓库克隆到本地
如果希望在克隆的时候,自己定义要新建的仓库目录名称,可以在上面的命令末尾指定新的名字:
$ git clone [email protected]:oschina/git-osc.git mygrit #通过ssh协议将仓库克隆到本地(配置公钥后才能用)
Git 支持许多数据传输协议。之前的例子使用的是 git:// 协议,不过你也可以用 http(s) 或者 user@server:/path.git 表示的 SSH 传输协议。
从远程仓库中获得数据,可以执行:
$ git fetch origin #这里的origin是远程仓库名字
这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。git fetch 命令只会将数据下载到你的本地仓库,并不会自动合并或修改你当前的工作(而git pull会)。 当准备好时你必须手动将其合并入你的工作。
查看仓库信息$ git remote show origin
默认情况下,在执行clone或者其他操作时,仓库名都是 origin ,想改为 oschina 那么就要在仓库目录下执行命令(不要与已有仓库别名冲突):
git remote rename origin oschina
这样远程仓库名字就改成了oschina,以后推送时执行的命令就是 git push oschina master,拉取也是一样的
在不执行克隆操作时,如果想将一个远程仓库添加到本地的仓库中,可以执行
git remote add origin 仓库地址
查看当前仓库对应的远程仓库地址
git remote -v
修改仓库对应的远程仓库地址
git remote set-url origin 仓库地址
如果因为一些原因想要移除一个远程仓库——已经从服务器上搬走了或不再想使用某一个特定的镜像了, 又或者某一个贡献者不再贡献了——可以使用 git remote remove 或 git remote rm :
$ git remote remove paul
$ git remote rm origin
一旦使用这种方式删除了一个远程仓库,所有和这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除。
相关文档2.4 Git 基础 - 撤消操作
我们需要回退到某个版本,这时就需要用到撤销命令,或者说这个应该翻译成重置更加恰当。具体命令如下:
撤销当前的修改:
git reset --hard
请注意:以上命令会完全重置你的修改,如果你想保留某些文件,请使用checkout +文件路径
命令来逐一撤销修改
果你想重置到某一版本,可以将 --hard 改为具体的Commit的id如:
git reset 1d7f5d89346
列出标签
在 Git 中列出已有的标签非常简单,只需要输入 git tag (可带上可选的 -l 选项 --list):
$ git tag
v1.0
v2.0
以字母顺序列出标签
如果只对 1.8.5 系列感兴趣,使用通配符:
$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5.1
v1.8.5.2
注意:按照通配符列出标签需要 -l 或 --list
Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)。
轻量标签很像一个不会改变的分支——它只是某个特定提交的引用。
如果只是想用一个临时的标签, 或者因为某些原因不想要保存这些信息,那么用轻量标签。
而附注标签是存储在 Git 数据库中的一个完整对象, 它们是可校验的,其中包含打标签者的name、email、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。 通常会建议创建附注标签。
在 Git 中创建附注标签在运行 tag 命令时指定 -a 选项:
$ git tag -a v1.4 -m "my version 1.4"
$ git tag
v0.1
v1.3
v1.4
-m 选项指定了一条将会存储在标签中的信息。 如果没有为附注标签指定一条信息,Git 会启动编辑器要求你输入信息。
通过使用 git show 命令可以看到标签信息和与之对应的提交信息:
$ git show v1.4
输出显示打标签者的信息、打标签的日期时间、附注信息,然后显示具体的提交信息。
另一种给提交打标签的方式是使用轻量标签。 轻量标签本质上是将提交校验和存储到一个文件中——没有保存任何其他信息。 创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字:
$ git tag v1.4-lw
此时列出标签则有
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5
假设提交历史是这样的:
$ git log --pretty=oneline
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme
假设在 v1.2 时忘记给项目打标签,也就是在 “updated rakefile” 提交。 可以在之后补上标签。 要在那个提交上打标签,需要在命令的末尾指定提交的校验和(或部分校验和):
$ git tag -a v1.2 9fceb02 #前7位
然后显示标签查看是否成功
$ git show v1.2
默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上,即git push
$ git push origin v1.5
如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。这将会把所有不在远程仓库服务器上的标签全部传送到那里。
$ git push origin --tags
要删除掉你本地仓库上的标签,可以使用命令 git tag -d
$ git tag -d v1.4-lw
注意上述命令并不会从任何远程仓库中移除这个标签,你必须用 git push :refs/tags/ 来更新你的远程仓库:
第一种变体是 git push
$ git push origin :refs/tags/v1.4-lw
上面这种操作的含义是,将冒号前面的空值推送到远程标签名,从而高效地删除它。
第二种更直观的删除远程标签的方式是:
$ git push origin --delete <tagname>
如果你想查看某个标签所指向的文件版本,可以使用 git checkout 命令, 虽然这会使你的仓库处于“分离头指针(detached HEAD)”的状态——这个状态有些不好的副作用:
$ git checkout v2.0.0
在“分离头指针”状态下,如果做了某些更改然后提交它们,标签不会发生变化, 但的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问。 因此,如果你需要进行更改,比如你要修复旧版本中的错误,那么通常需要创建一个新分支:
$ git checkout -b version2 v2.0.0
如果在这之后又进行了一次提交,version2 分支就会因为这个改动向前移动, 此时它就会和 v2.0.0 标签稍微有些不同,这时就要当心了。
通过 git config 文件为命令设置一个别名。
$ git config --global alias.co checkout #输入co可以代替checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
可以向 Git 中添加你自己的取消暂存别名:
$ git config --global alias.unstage 'reset HEAD --'
这会使下面的两个命令等价:
$ git unstage fileA
$ git reset HEAD -- fileA
这样看起来更清楚一些。 通常也会添加一个 last 命令,像这样:
$ git config --global alias.last 'log -1 HEAD'
这样,可以轻松地看到最后一次提交:
$ git last
然而,执行外部命令,而不是一个 Git 子命令。 如果这样,可以在命令前面加入 ! 符号。 如果你自己要写一些与 Git 仓库协作的工具的话,那会很有用。 我们现在演示将 git visual 定义为 gitk 的别名:
$ git config --global alias.visual '!gitk'