(1)提交修改到远程的git repository的基本流程(前提是你当前目录已经处于git版本控制之下)
添加当前目录下所有文件到“即将提交的列表”(当然也可以指定某些指定的文件,将 . 换成指定的文件即可):
1
|
git add .
|
将修改提交到本地:
1
|
git commit -m "对本次修改的注释写在这里"
|
提交到远程的git repository:
1
|
git push
|
(2)删除远程git repository中的文件
假设要删除当前目录下的abc.txt文件(指远程git repository中的),则:
1
|
git
rm
abc.txt
|
然后提交到本地:
1
|
git commit -m
"delete a file"
|
然后提交到远程的repository:
1
|
git push
|
文章来源:http://www.codelast.com/
(3)TortoiseGit提交代码前弹出错误提示“username and email must be set...”的解决办法
Git Commit(提交)的时候,如果Tortoise弹出一个错误对话框,提示你必须先设置用户名和Email,那么你理所当然地按它的指引点击“Yes”去设置,奇葩的是,在我的Win7上,TortoiseGit settings→Git页面中的“Name”和“Email”竟然无法输入文字(仿佛输入框是只读的一样)!就算我找到了这篇教程,也无济于事。
后来我又找到了这篇教程,尝试用命令行去设置,果然OK了:
1
2
|
d:\git\bin>git.exe config --global user.name "你的用户名"
d:\git\bin>git.exe config --global user.email "你的Email"
|
执行这两条命令之后,再回到TortoiseGit的settings→Git页面,就看到Name和Email已经设置好了。
(4)解决每次 git pull 的时候都提示输入密码的烦人问题
执行以下命令:
1
|
git config --global credential.helper
"cache --timeout=360000"
|
其中,timeout值表示缓存密码多少时间(单位是毫秒还是秒,我不记得了),把它设置为一个非常大的值即可,然后你再git pull的时候,按提示输入密码之后,下一次就不会再提示输入密码了(在timeout时间之内)。
文章来源:http://www.codelast.com/
(5)Windows下的TortoiseGit每次push的时候都提示要输入密码的问题
可以通过修改TortoiseGit的配置来解决:
在设置界面中,“Git”设置子项中,点击“编辑本地.git/config”,会打开一个文本文件,在最后加上如下内容并保存:
1
2
|
[credential]
helper = store
|
然后再push一次并输入密码,TortoiseGit就可以记住你的密码啦。
(6)提交代码到远程的branch
1
|
git push -u origin local_branch_name:remove_branch_name
|
会把本地的 local_branch_name 这个分支提交到远程的 remote_branch_name 这个分支上,如果远程没有这个分支,就会被创建。
(7)删除远程的branch
前面用 git push 命令把本地的分支推送到远程的分支上,命令是很形象的,但是让人非常费解的就是,要删除远程的branch,同样可以用这个push命令:
1
|
git push -u origin :remote_branch_name
|
表示删除远程的 remote_branch_name 这个分支。这个让人费解的命令,可以参考Git手册中的说明来理解。
(8)修改已提交的信息
修改最近一次提交的信息很简单:
1
|
git commit --amend
|
在弹出的编辑界面中修改并保存,再用 git log 看一下,提交的信息是不是已经变了?
但如果要编辑的信息,不是最近一次提交呢?这就需要用到 git rebase 命令了。步骤如下:
用 git log 命令查看到你要修改的那一次提交的版本,然后找到比它更旧的再前一个版本的版本号,例如 f0d1fad,然后:
1
|
git rebase -i f0d1fad
|
在弹出的编辑界面中,会看到类似于下面的信息:
1
2
|
pick a3d4def 修改了一处实现
pick d0ea224 添加了配置文件
|
假设我们要修改的提交信息,是第二行那一次提交,则把它前面的“pick”改为“edit”或“e”(就是edit的缩写),然后保存。
此时,再用 git log 查看一下,最近的一次提交竟然变成了你刚修改的那次提交?没错,然后我们就可以像前面的方法一样,用 git commit --amend 来修改最近一次的提交信息了。
修改完信息之后,还要把 git log 的信息顺序改回来,通过如下命令完成最后一个操作:
1
|
git rebase --
continue
|
文章来源:http://www.codelast.com/
(9)配置命令别名
例如,git status这个超级常用的命令实在太长了,git st 就很好,可以像下面这样配置,使得执行 git st 的时候,等同于 git status:
1
|
git config --global
alias
.st status
|
(10)查看文件差异
修改了一个文件(该文件已经加入版本控制中了),还没有把它 git add 到暂存区,则用以下命令就可以看到修改了什么:
1
|
git
diff
|
如果已经把该文件 git add 到了暂存区,再使用 git diff 命令,将没有任何输出。此时,应使用以下两个命令中的任何一个,可以查看到修改的内容(其实显示的就是暂存区里和上一次提前之间的差异):
1
2
|
git
diff
--cached
git
diff
--staged
|
(11)将一个文件移除出版本控制,但是并不将它从本地磁盘上删除
git rm your_file 会将文件 your_file 从本地以及版本控制系统中都删除掉,但是如果我只想把此文件移除出版本控制系统,但并不想把它从本地磁盘上删除,则可以这样做:
1
|
git
rm
--cached your_file
|
(12)用meld及git-diffall来比较两个版本之间的文件差异
Meld是一款超级强大的图形化diff比较工具,比你用diff命令查看两个文件的差异要直观得多,那么,如何让git与Meld整合到一起呢?需要用到一个叫git-diffall的第三方脚本,下面会说到。
1
|
sudo
apt-get
install
meld
|
1
|
sudo
cp
git-diffall
/usr/bin
|
1
2
|
git config --global
diff
.tool meld
git config --global
alias
.diffall git-diffall
|
1
|
git difftool ..master src
/test/MyClass
.java
|
然后,在弹出的Meld界面中,尽情体验强大的Meld带给我们的美妙感觉吧!
文章来源:http://www.codelast.com/
(13)撤消修改的几种情况
在SVN中,修改了一个文件之后,还没有提交的话,我们可以用 svn revert your_file 命令,来撤消我们对文件 your_file 所做的修改,使之恢复到没修改之前的状态。但是在Git中,等价的命令是什么呢?在很少使用git之前,我也有这个问题,于是我到Google上一搜“svn revert git”,搜出来很多人都在问这个问题,其实要理解好这个问题,需要先理解好git有工作区、暂存区(stage)的概念,而SVN没有暂存区的概念,所以,当你刚从SVN转到Git时,会很困惑为什么Git撤消修改那么麻烦。其实这才是Git强大之处啊。
①修改了一个文件,还没有将它添加到暂存区,此时,要撤消所做的修改:
1
|
git checkout -- your_file
|
②修改了一个文件,并且已经通过 git add your_file 把它添加到了暂存区,则想把这个文件复原,先要把它从暂存区“弄出来”:
1
|
git reset HEAD your_file
|
现在,你再用 git status 命令查看的话,会发现它已经被从暂存区“拿出来”了,变成了没有 git add 的状态,但是,它仍然是我们修改过内容的,要继续撤消我们修改的内容的话,继续像上面一样,用 git checkout -- your_file 命令,即可将你所做的修改完全复原了。
(14)查看每个版本修改的文件
git log 可以查看提交日志,再加一个参数就可以看到每个版本修改的文件都有哪些了:
1
|
git log --name-status
|
文章来源:http://www.codelast.com/
(15)一次git add所有modified的文件到暂存区
如果你修改了100个文件,那么一个个地 git add 它们到暂存区无异于自虐,此时你需要的是批量add:
1
|
git add -i
|
然后就进入了交互式界面:
1
2
|
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
|
选择2,回车,会列出所有将要被 add 的文件,输入星号(*)并回车(表示选择所有文件),然后又会回到上面的菜单界面,选择7回车退出,这时再用 git status 看一下,是不是所有修改过的文件都添加到了暂存区里了?
(16)利用Bitbucket在两地同步私有代码
与Github不同,Bitbucket可以创建private的代码仓库,这对个人而言非常有用。例如,你在台式机A上写的代码,当你出差到其他城市后,还想在你带的笔记本(记为B)上继续写,那么这时候怎么办?有一个傻傻的办法就是连上电脑A(如果可以的话),然后把整个项目打一个tar包,传到B上,但如果你的整个项目目录非常大,压缩之后仍有几百M,那么你可能需要耗费大量时间来传输。更为可取的一个办法就是利用类似于Bitbucket这样的服务,来同步代码,使得只需要更新少量数据就OK了。
下面是步骤:
1
|
git remote add origin https:
//codelast
@bitbucket.org
/codelast/my-repo
.git
|
1
|
git push -u origin my-branch:my-branch
|
1
2
|
git checkout master
git fetch
|
1
2
|
git checkout -b my-branch
git merge origin
/my-branch
|
1
2
3
4
|
Updating e8b4538..6bc7bcd
Fast-forward
src/java/com/codelast/Demo.java | 11 +++++++
......
|
1
2
|
git checkout -b my-branch
git pull
|
1
2
3
4
5
6
7
8
9
|
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> my-branch
|
1
|
git branch --
set
-upstream-to=origin
/my-branch
my-branch
|
1
|
Branch my-branch set up to track remote branch my-branch from origin.
|
文章来源:http://www.codelast.com/
(17)查看当前版本比上一个版本修改了什么内容
1
|
git
diff
HEAD^ HEAD
|
其中,HEAD代表当前版本,后面带一个 ^ 号表示其之前一个版本。
(18)To be added...