Git 学习笔记

git基本操作

 

 

Git 学习

git基本操作

git --help : 查看git常见命令

git clone:得到一个项目的拷贝

eg:git clone git://git.kernel.org/pub/scm/git/git.git 。如果访问一个Git URL需要用法名和密码,可以在Git URL 前加上用户名,并用@符号表示分割

touch file:新建一个内容为空的文件

ls -b:显示文件列表

ls -a:显示所有文件

git status (-s):查看上次提交之后是否有修改(加-s获得简短的输出)

git diff:查看未缓存的改动

git diff --cached:查看已经缓存的改动

git add . /file name:将想要的快照写入缓存

git commit:将缓存法人内容添加到仓库中,Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址

git commit -m '第一次版本提交'

git commit -am ‘修改的hello.php文件’: 如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。

git reset HEAD file : 取消某文件的缓存(我们将某文件add到缓冲区后)

git rm:从git中移除某个文件,就必须从已经跟踪文件清单中移除,然后提交。git rm -f file:如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f

git rm --cached file : 如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可

git mv README README.md :用于移动或重命名一个文件目录。软连接

 

分支管理

git branch (branchname) : 创建分支

注:在当前分支(A)下创建新的分支(B),那么B和创建时刻的A是相同的(可以认为B复制了A)

git checkout(branchname):切换分支

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

git merge:合并分支(你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。 )

git branch:列出分支

git branch -r:列出所有远程分支

git branch -a : 列出所有本地和远程分支

 

eg: *master :此例的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支。

当你执行 git init 的时候,默认情况下 Git 就会为你创建 master 分支。

如果我们要手动创建一个分支。执行git branch (branchname)即可

echo .... >filename : 创建文件并将 .... 作为文件初始内容

git checkout -b (branchname) :创建分支,并切换到该分支下

git branch -d (branchname):删除分支

git merge : 合并分支(一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支 )

cat file / cat file1 file2> traget_file : 打印文件/将多个文件合并到一个文件

查看提交历史

git log : 列出历史提交记录

git log --oneline:简洁版列出历史提交记录

git log --reverse --oneline : 逆向显示所有日志

git log --author= authorname --oneline :查找指定用户的提交日志

git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges : 指定日期

如果我要看 Git 项目中三周前且在四月十八日之后的所有提交,我可以执行这个(我还用了 --no-merges 选项以隐藏合并提交):

标签

git tag -a v1.0 85fc7e7 : 给85fc7e7追加标签

git tag -a v1.0 : 给最新一次提交打上标签

git tag -d [name] : 删除版本

git tag -r : 查看远程版本

git push origin [name] : 创建远程版本(本地版本push到远程)

git push origin :refs/tags/[name] : 删除远程版本

git pull origin --tags : 合并远程仓库的tag到本地

git push origin --tags : 上传本地tag到远程仓库

 

 

 

Git Github

git remote add [name]+[url]:添加远程仓库

git remote set-url --push [name] + [newurl]:修改远程仓库

git pull [remoteName]+[localBranchName]:拉取远程仓库

git push [remoteName]+[localBranchName]:推送到远程仓库

git push origin test:master : 提交本地test分支作为远程的master分支

 

提交到Github

git remote add origin git@github.com:csushl/runoob-git-test.git :添加新的远程仓库

git push -u origin master

 

git push [alias] + [branch] : 以上命令将你的 [branch] 分支推送成为 [alias] 远程仓库上的 [branch] 分支

git remote (-v) : 查看当前配置有哪些仓库(加-v,还可以看到每个别名的实际链接地址)

在线修改,然后本地更新修改

git fetch origin(仓库)(master): 从远程仓库下载新分支与数据到本地(不合并)

该命令执行完后需要执行git merge 远程分支到你所在的分支。

git merge origin/master(分支) : 从远端仓库提取数据并尝试合并到当前分支

git pull origin master:是将远程主机的master分支最新内容拉下来后与当前本地分支直接合并 fetch+merge

 

推送到远程仓库

eg:

$ touch runoob-test.txt      # 添加文件
$ git add runoob-test.txt
$ git commit -m "添加到远程"
master 69e702d] 添加到远程
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 runoob-test.txt

$ git push origin master    # 推送到 Github

git push origin master : 推送到 Github

 

git remote rm (仓库名):删除远程仓库

 

git reset

git reset --soft :回退到某个版本,只回退了commit的信息,不会回复到Index file一级(即git add 一级),如果还要提交,直接commit即可。 参数只告诉git 讲其他的commit重置到HEAD,就此而已。index和working copy中的文件都不改变。

git reset --mixed (默认): 回退到某个版本,只保留源码,回退commit和add 。 改变HEAD和Index,指向那个你要reset到的commit上。而working copy文件不被改变,当然会显示工作目录下有修改,但没有缓存到index中。

git reset --hard : 三个地方同时改变(比较危险,执行之后,你的本地修改可能就丢失了)。

 

git stash

默认情况下, git stash 命令会把以下修改存储到一个新的堆栈中。堆栈中的内容(stash)可以被所有分支访问。

  • 暂存区中的修改

  • 工作区中已经存在的文件的修改

也就是说,默认情况下,git stash命令不会存储下列文件。

  • 工作区中新增的文件(untracked files)

  • 被版本库忽略的文件(.gitignore中定义的)

git stash -u :如果你还想要存储 untracked files,可以使用 -u 选项 .

git stash -a : 如果你还想要存储 untracked files 和被版本库忽略的文件,可以使用 -a 选项。

但是,一般不推荐这么做,因为既然是被版本库忽略的文件,就没有必要再存储起来。除非你有非常特别的需求。

git stash save "message" : 在git stash 时候添加一个message注解

执行 git stash 命令后,工作区就恢复到了上一次 git commit 时的状态。具体表现为:

  • 暂存区中的修改看不见了。

  • 工作区中已经存在的文件的修改也看不见了。

  • 如果使用了 -u 选项,工作区中新添加的文件对于工作区也看不见了。

这样工作区就干净多了。使用 git diff 和 git diff --cached 也看不到工作区和暂存区中的修改了。因为它们都被存储到了一个堆栈中。

然后,我们就可以新建分支,切换到新的分支来处理其他的需求。

 

git stash save -u "message" : 储存到堆栈

git stash list : 查看堆栈中的stash列表(堆栈中可能会有多个 stash,通过 stash_id 进行区分)

git stash show / git stash show stash@{id} / git stash show -p :查看stash的内容

git stash apply stash@{id}:将堆栈中的指定 stash 应用到工作区(保留堆栈的内容)

git stash apply ( stash@{0} ) : 将堆栈中的最近一次 stash,应用到工作区(保留堆栈的内容)

git stash pop : 将堆栈中的最近一次 stash,应用到工作区(删除堆栈的内容)

git stash drop stash@{id} : 删除指定的stash

git stash drop : 删除最近一次的stash

git stash clear : 删除所有的stash

 

git rebase

--rebase不会产生合并的提交,它会将本地的所有提交临时保存为补丁(patch),放在”.git/rebase”目录中,然后将当前分支更新到最新的分支尖端,最后把保存的补丁应用到分支上.

     rebase的过程中,也许会出现冲突,Git会停止rebase并让你解决冲突,在解决完冲突之后,用git add去更新这些内容,然后无需执行commit,只需要:

     git rebase --continue就会继续打余下的补丁.

     git rebase --abort将会终止rebase,当前分支将会回到rebase之前的状态.

cherry-pick

  git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit)。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了。

就是对已经存在的commit进行再次提交:

git cherry-pick commit-id

可以使用git log查询commit id

 

其他

mkdir filename :当前目录下创建文件

pwd : 显示当前目录

 

 

 

 

 

posted @ 2020-04-20 18:19  StarHai  阅读(226)  评论(0编辑  收藏  举报